diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2018-03-23T10·22+0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-23T10·22+0100 |
commit | 0cb1e52052901c375d2b9d6bfb475b181f4464c2 (patch) | |
tree | 88c9d8e38c1e06be2ba8f3a25bde9da22c952683 | |
parent | e2f56c1333d542b8022205215b637a30e71314c7 (diff) | |
parent | 74da813912895015cf0f26da7aa520b278cb8071 (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.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 6eb87096692f..4d7f5690192d 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); } |