aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2018-03-23 11:22:43 +0100
committerGitHub <noreply@github.com>2018-03-23 11:22:43 +0100
commit0cb1e52052901c375d2b9d6bfb475b181f4464c2 (patch)
tree88c9d8e38c1e06be2ba8f3a25bde9da22c952683
parente2f56c1333d542b8022205215b637a30e71314c7 (diff)
parent74da813912895015cf0f26da7aa520b278cb8071 (diff)
Merge pull request #2004 from dtzWill/feature/improved-store-mismatch-errors
download.cc: improve error for hash mismatch, fixup cache hits w/diverted store
-rw-r--r--src/libstore/download.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc
index 6eb870966..4d7f56901 100644
--- a/src/libstore/download.cc
+++ b/src/libstore/download.cc
@@ -632,7 +632,7 @@ Path Downloader::downloadCached(ref<Store> 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";
@@ -726,8 +726,13 @@ Path Downloader::downloadCached(ref<Store> 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);
}