diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-10-30T09·16+0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-10-30T09·22+0100 |
commit | 66ddbef7547a2b5430c6d87e2d8d52977f7bf6f0 (patch) | |
tree | dd47c67718b9de379ae30fc39ba45d354035d8e4 | |
parent | f25791c196e7bcf76aa76e143a679fe731f77513 (diff) |
fetchurl/fetchTarball: Respect name changes
The computation of urlHash didn't take the name into account, so subsequent fetchurl calls with the same URL but a different name would resolve to the same cached store path.
-rw-r--r-- | src/libexpr/primops.cc | 2 | ||||
-rw-r--r-- | src/libstore/download.cc | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 6a50c99345e4..43dc20080197 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -1911,7 +1911,7 @@ void fetch(EvalState & state, const Pos & pos, Value * * args, Value & v, { string url; Hash expectedHash; - string name; + string name = ""; state.forceValue(*args[0]); diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 608b8fd399b4..579a5e8c1b59 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -23,6 +23,8 @@ #include <cmath> #include <random> +using namespace std::string_literals; + namespace nix { double getTime() @@ -604,7 +606,7 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa Path cacheDir = getCacheDir() + "/nix/tarballs"; createDirs(cacheDir); - string urlHash = hashString(htSHA256, url).to_string(Base32, false); + string urlHash = hashString(htSHA256, name + std::string("\0"s) + url).to_string(Base32, false); Path dataFile = cacheDir + "/" + urlHash + ".info"; Path fileLink = cacheDir + "/" + urlHash + "-file"; |