about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/download.cc14
-rw-r--r--src/libstore/download.hh7
-rwxr-xr-xsrc/nix-channel/nix-channel.cc2
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