aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/download.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/download.cc')
-rw-r--r--src/libstore/download.cc44
1 files changed, 22 insertions, 22 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc
index 975cfd97d..a7c2600f6 100644
--- a/src/libstore/download.cc
+++ b/src/libstore/download.cc
@@ -319,10 +319,10 @@ struct CurlDownloader : public Downloader
long httpStatus = 0;
curl_easy_getinfo(req, CURLINFO_RESPONSE_CODE, &httpStatus);
- char * effectiveUrlCStr;
- curl_easy_getinfo(req, CURLINFO_EFFECTIVE_URL, &effectiveUrlCStr);
- if (effectiveUrlCStr)
- result.effectiveUrl = effectiveUrlCStr;
+ char * effectiveUriCStr;
+ curl_easy_getinfo(req, CURLINFO_EFFECTIVE_URL, &effectiveUriCStr);
+ if (effectiveUriCStr)
+ result.effectiveUri = effectiveUriCStr;
debug("finished %s of '%s'; curl status = %d, HTTP status = %d, body = %d bytes",
request.verb(), request.uri, code, httpStatus, result.bodySize);
@@ -790,18 +790,20 @@ void Downloader::download(DownloadRequest && request, Sink & sink)
}
}
-CachedDownloadResult Downloader::downloadCached(ref<Store> store, const string & url_, bool unpack, string name, const Hash & expectedHash, string * effectiveUrl, int ttl)
+CachedDownloadResult Downloader::downloadCached(
+ ref<Store> store, const CachedDownloadRequest & request)
{
- auto url = resolveUri(url_);
+ auto url = resolveUri(request.uri);
+ auto name = request.name;
if (name == "") {
auto p = url.rfind('/');
if (p != string::npos) name = string(url, p + 1);
}
Path expectedStorePath;
- if (expectedHash) {
- expectedStorePath = store->makeFixedOutputPath(unpack, expectedHash, name);
+ if (request.expectedHash) {
+ expectedStorePath = store->makeFixedOutputPath(request.unpack, request.expectedHash, name);
if (store->isValidPath(expectedStorePath)) {
CachedDownloadResult result;
result.storePath = expectedStorePath;
@@ -835,10 +837,9 @@ CachedDownloadResult Downloader::downloadCached(ref<Store> store, const string &
auto ss = tokenizeString<vector<string>>(readFile(dataFile), "\n");
if (ss.size() >= 3 && ss[0] == url) {
time_t lastChecked;
- if (string2Int(ss[2], lastChecked) && lastChecked + ttl >= time(0)) {
+ if (string2Int(ss[2], lastChecked) && lastChecked + request.ttl >= time(0)) {
skip = true;
- if (effectiveUrl)
- *effectiveUrl = url_;
+ result.effectiveUri = request.uri;
result.etag = ss[1];
} else if (!ss[1].empty()) {
debug(format("verifying previous ETag '%1%'") % ss[1]);
@@ -852,18 +853,17 @@ CachedDownloadResult Downloader::downloadCached(ref<Store> store, const string &
if (!skip) {
try {
- DownloadRequest request(url);
- request.expectedETag = expectedETag;
- auto res = download(request);
- if (effectiveUrl)
- *effectiveUrl = res.effectiveUrl;
+ DownloadRequest request2(url);
+ request2.expectedETag = expectedETag;
+ auto res = download(request2);
+ result.effectiveUri = res.effectiveUri;
result.etag = res.etag;
if (!res.cached) {
ValidPathInfo info;
StringSink sink;
dumpString(*res.data, sink);
- Hash hash = hashString(expectedHash ? expectedHash.type : htSHA256, *res.data);
+ Hash hash = hashString(request.expectedHash ? request.expectedHash.type : htSHA256, *res.data);
info.path = store->makeFixedOutputPath(false, hash, name);
info.narHash = hashString(htSHA256, *sink.s);
info.narSize = sink.s->size();
@@ -883,7 +883,7 @@ CachedDownloadResult Downloader::downloadCached(ref<Store> store, const string &
}
}
- if (unpack) {
+ if (request.unpack) {
Path unpackedLink = cacheDir + "/" + baseNameOf(storePath) + "-unpacked";
PathLocks lock2({unpackedLink}, fmt("waiting for lock on '%1%'...", unpackedLink));
Path unpackedStorePath;
@@ -906,11 +906,11 @@ CachedDownloadResult Downloader::downloadCached(ref<Store> store, const string &
}
if (expectedStorePath != "" && storePath != expectedStorePath) {
- Hash gotHash = unpack
- ? hashPath(expectedHash.type, store->toRealPath(storePath)).first
- : hashFile(expectedHash.type, store->toRealPath(storePath));
+ Hash gotHash = request.unpack
+ ? hashPath(request.expectedHash.type, store->toRealPath(storePath)).first
+ : hashFile(request.expectedHash.type, store->toRealPath(storePath));
throw nix::Error("hash mismatch in file downloaded from '%s':\n wanted: %s\n got: %s",
- url, expectedHash.to_string(), gotHash.to_string());
+ url, request.expectedHash.to_string(), gotHash.to_string());
}
result.storePath = storePath;