diff options
-rw-r--r-- | src/libstore/download.cc | 14 | ||||
-rw-r--r-- | src/libstore/download.hh | 7 | ||||
-rwxr-xr-x | src/nix-channel/nix-channel.cc | 2 |
3 files changed, 7 insertions, 16 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 5cb2b497a50a..ed7e124d25f4 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -249,13 +249,7 @@ ref<Downloader> makeDownloader() return make_ref<CurlDownloader>(); } -Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpack, string name, const Hash & expectedHash) -{ - string ignored; - return downloadCached(store, url_, unpack, ignored, expectedHash); -} - -Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpack, string & effectiveUrl, const Hash & expectedHash) +Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpack, string name, const Hash & expectedHash, string * effectiveUrl) { auto url = resolveUri(url_); @@ -295,7 +289,8 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa time_t lastChecked; if (string2Int(ss[2], lastChecked) && lastChecked + ttl >= time(0)) { skip = true; - effectiveUrl = url_; + if (effectiveUrl) + *effectiveUrl = url_; } else if (!ss[1].empty()) { printMsg(lvlDebug, format("verifying previous ETag ‘%1%’") % ss[1]); expectedETag = ss[1]; @@ -311,7 +306,8 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa DownloadOptions options; options.expectedETag = expectedETag; auto res = download(url, options); - effectiveUrl = res.effectiveUrl; + if (effectiveUrl) + *effectiveUrl = res.effectiveUrl; if (!res.cached) { ValidPathInfo info; diff --git a/src/libstore/download.hh b/src/libstore/download.hh index cb7de6ef1d99..011b85f4721b 100644 --- a/src/libstore/download.hh +++ b/src/libstore/download.hh @@ -32,12 +32,7 @@ struct Downloader virtual DownloadResult download(string url, const DownloadOptions & options) = 0; Path downloadCached(ref<Store> store, const string & url, bool unpack, string name = "", - const Hash & expectedHash = Hash()); - - /* Need to overload because can't have an rvalue default value for non-const reference */ - - Path downloadCached(ref<Store> store, const string & url, bool unpack, - string & effectiveUrl, const Hash & expectedHash = Hash()); + const Hash & expectedHash = Hash(), string * effectiveUrl = nullptr); enum Error { NotFound, Forbidden, Misc, Transient }; }; diff --git a/src/nix-channel/nix-channel.cc b/src/nix-channel/nix-channel.cc index 79c9d0eceb6b..0f7858aa53a5 100755 --- a/src/nix-channel/nix-channel.cc +++ b/src/nix-channel/nix-channel.cc @@ -86,7 +86,7 @@ static void update(const StringSet & channelNames) // definition from a consistent location if the redirect changes mid-download. auto effectiveUrl = string{}; auto dl = makeDownloader(); - auto filename = dl->downloadCached(store, url, false, effectiveUrl); + auto filename = dl->downloadCached(store, url, false, "", Hash(), &effectiveUrl); url = chomp(std::move(effectiveUrl)); // If the URL contains a version number, append it to the name |