Merge pull request #2004 from dtzWill/feature/improved-store-mismatch-errors

download.cc: improve error for hash mismatch, fixup cache hits w/diverted store
This commit is contained in:
Eelco Dolstra 2018-03-23 11:22:43 +01:00 committed by GitHub
commit 0cb1e52052
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -632,7 +632,7 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
if (expectedHash) { if (expectedHash) {
expectedStorePath = store->makeFixedOutputPath(unpack, expectedHash, name); expectedStorePath = store->makeFixedOutputPath(unpack, expectedHash, name);
if (store->isValidPath(expectedStorePath)) if (store->isValidPath(expectedStorePath))
return expectedStorePath; return store->toRealPath(expectedStorePath);
} }
Path cacheDir = getCacheDir() + "/nix/tarballs"; Path cacheDir = getCacheDir() + "/nix/tarballs";
@ -726,8 +726,13 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
storePath = unpackedStorePath; storePath = unpackedStorePath;
} }
if (expectedStorePath != "" && storePath != expectedStorePath) if (expectedStorePath != "" && storePath != expectedStorePath) {
throw nix::Error("store path mismatch in file downloaded from '%s'", url); 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); return store->toRealPath(storePath);
} }