mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-22 14:06:16 +02:00
Merge pull request #11051 from Mic92/fix-prefetch
src/nix/prefetch: fix prefetch containing current directory instead o…
This commit is contained in:
commit
d5461b9009
2 changed files with 18 additions and 5 deletions
|
@ -114,15 +114,16 @@ std::tuple<StorePath, Hash> prefetchFile(
|
||||||
createDirs(unpacked);
|
createDirs(unpacked);
|
||||||
unpackTarfile(tmpFile.string(), unpacked);
|
unpackTarfile(tmpFile.string(), unpacked);
|
||||||
|
|
||||||
|
auto entries = std::filesystem::directory_iterator{unpacked};
|
||||||
/* If the archive unpacks to a single file/directory, then use
|
/* If the archive unpacks to a single file/directory, then use
|
||||||
that as the top-level. */
|
that as the top-level. */
|
||||||
auto entries = std::filesystem::directory_iterator{unpacked};
|
|
||||||
auto file_count = std::distance(entries, std::filesystem::directory_iterator{});
|
|
||||||
if (file_count == 1)
|
|
||||||
tmpFile = entries->path();
|
tmpFile = entries->path();
|
||||||
else
|
auto fileCount = std::distance(entries, std::filesystem::directory_iterator{});
|
||||||
|
if (fileCount != 1) {
|
||||||
|
/* otherwise, use the directory itself */
|
||||||
tmpFile = unpacked;
|
tmpFile = unpacked;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Activity act(*logger, lvlChatty, actUnknown,
|
Activity act(*logger, lvlChatty, actUnknown,
|
||||||
fmt("adding '%s' to the store", url));
|
fmt("adding '%s' to the store", url));
|
||||||
|
|
|
@ -54,6 +54,18 @@ test_tarball() {
|
||||||
# with the content-addressing
|
# with the content-addressing
|
||||||
(! nix-instantiate --eval -E "fetchTree { type = \"tarball\"; url = file://$tarball; narHash = \"$hash\"; name = \"foo\"; }")
|
(! nix-instantiate --eval -E "fetchTree { type = \"tarball\"; url = file://$tarball; narHash = \"$hash\"; name = \"foo\"; }")
|
||||||
|
|
||||||
|
store_path=$(nix store prefetch-file --json "file://$tarball" | jq -r .storePath)
|
||||||
|
if ! cmp -s "$store_path" "$tarball"; then
|
||||||
|
echo "prefetched tarball differs from original: $store_path vs $tarball" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
store_path2=$(nix store prefetch-file --json --unpack "file://$tarball" | jq -r .storePath)
|
||||||
|
diff_output=$(diff -r "$store_path2" "$tarroot")
|
||||||
|
if [ -n "$diff_output" ]; then
|
||||||
|
echo "prefetched tarball differs from original: $store_path2 vs $tarroot" >&2
|
||||||
|
echo "$diff_output"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
test_tarball '' cat
|
test_tarball '' cat
|
||||||
|
|
Loading…
Reference in a new issue