From 59b32403f2320e1979e5707b59d1dafcaf6ae910 Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Thu, 22 Mar 2018 12:37:20 -0500 Subject: [PATCH 1/2] download.cc: fix path for cached files --- src/libstore/download.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 6eb870966..2954b221d 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -632,7 +632,7 @@ Path Downloader::downloadCached(ref store, const string & url_, bool unpa if (expectedHash) { expectedStorePath = store->makeFixedOutputPath(unpack, expectedHash, name); if (store->isValidPath(expectedStorePath)) - return expectedStorePath; + return store->toRealPath(expectedStorePath); } Path cacheDir = getCacheDir() + "/nix/tarballs"; From 74da813912895015cf0f26da7aa520b278cb8071 Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Thu, 22 Mar 2018 09:56:54 -0500 Subject: [PATCH 2/2] download: improve error for hash mismatch ("store mismatch") Fixes #1905 --- src/libstore/download.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 2954b221d..4d7f56901 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -726,8 +726,13 @@ Path Downloader::downloadCached(ref store, const string & url_, bool unpa storePath = unpackedStorePath; } - if (expectedStorePath != "" && storePath != expectedStorePath) - throw nix::Error("store path mismatch in file downloaded from '%s'", url); + if (expectedStorePath != "" && storePath != expectedStorePath) { + Hash gotHash = unpack + ? hashPath(expectedHash.type, store->toRealPath(storePath)).first + : hashFile(expectedHash.type, store->toRealPath(storePath)); + throw nix::Error("hash mismatch in file downloaded from '%s': expected hash '%s', got '%s'", + url, expectedHash.to_string(), gotHash.to_string()); + } return store->toRealPath(storePath); }