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.
This commit is contained in:
Eelco Dolstra 2017-10-30 10:16:19 +01:00
parent f25791c196
commit 66ddbef754
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
2 changed files with 4 additions and 2 deletions

View file

@ -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]);

View file

@ -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";