mirror of
https://github.com/NixOS/nix
synced 2025-07-01 16:41:47 +02:00
parent
94f11d0a61
commit
dc29e9fb47
6 changed files with 29 additions and 12 deletions
|
@ -790,7 +790,7 @@ void Downloader::download(DownloadRequest && request, Sink & sink)
|
|||
}
|
||||
}
|
||||
|
||||
Path 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 string & url_, bool unpack, string name, const Hash & expectedHash, string * effectiveUrl, int ttl)
|
||||
{
|
||||
auto url = resolveUri(url_);
|
||||
|
||||
|
@ -802,8 +802,11 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
|
|||
Path expectedStorePath;
|
||||
if (expectedHash) {
|
||||
expectedStorePath = store->makeFixedOutputPath(unpack, expectedHash, name);
|
||||
if (store->isValidPath(expectedStorePath))
|
||||
return store->toRealPath(expectedStorePath);
|
||||
if (store->isValidPath(expectedStorePath)) {
|
||||
CachedDownloadResult result;
|
||||
result.path = store->toRealPath(expectedStorePath);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Path cacheDir = getCacheDir() + "/nix/tarballs";
|
||||
|
@ -822,6 +825,8 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
|
|||
|
||||
bool skip = false;
|
||||
|
||||
CachedDownloadResult result;
|
||||
|
||||
if (pathExists(fileLink) && pathExists(dataFile)) {
|
||||
storePath = readLink(fileLink);
|
||||
store->addTempRoot(storePath);
|
||||
|
@ -833,6 +838,7 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
|
|||
skip = true;
|
||||
if (effectiveUrl)
|
||||
*effectiveUrl = url_;
|
||||
result.etag = ss[1];
|
||||
} else if (!ss[1].empty()) {
|
||||
debug(format("verifying previous ETag '%1%'") % ss[1]);
|
||||
expectedETag = ss[1];
|
||||
|
@ -850,6 +856,7 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
|
|||
auto res = download(request);
|
||||
if (effectiveUrl)
|
||||
*effectiveUrl = res.effectiveUrl;
|
||||
result.etag = res.etag;
|
||||
|
||||
if (!res.cached) {
|
||||
ValidPathInfo info;
|
||||
|
@ -871,6 +878,7 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
|
|||
} catch (DownloadError & e) {
|
||||
if (storePath.empty()) throw;
|
||||
printError(format("warning: %1%; using cached result") % e.msg());
|
||||
result.etag = expectedETag;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -904,7 +912,8 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
|
|||
url, expectedHash.to_string(), gotHash.to_string());
|
||||
}
|
||||
|
||||
return store->toRealPath(storePath);
|
||||
result.path = store->toRealPath(storePath);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue