lix/tests/functional/fetchTree-file.sh
Raito Bezarius b8cb7abcf0 chore: rebrand Nix to Lix when it makes sense
Here's my guide so far:

$ rg '((?!(recursive).*) Nix
(?!(daemon|store|expression|Rocks!|Packages|language|derivation|archive|account|user|sandbox|flake).*))'
-g '!doc/' --pcre2

All items from this query have been tackled. For the documentation side:
that's for https://git.lix.systems/lix-project/lix/issues/162.

Additionally, all remaining references to github.com/NixOS/nix which
were not relevant were also replaced.

Fixes: https://git.lix.systems/lix-project/lix/issues/148.
Fixes: https://git.lix.systems/lix-project/lix/issues/162.
Change-Id: Ib3451fae5cb8ab8cd9ac9e4e4551284ee6794545
Signed-off-by: Raito Bezarius <raito@lix.systems>
2024-06-01 20:31:24 +02:00

117 lines
3.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

source common.sh
clearStore
cd "$TEST_ROOT"
test_fetch_file () {
echo foo > test_input
input_hash="$(nix hash path test_input)"
nix eval --impure --file - <<EOF
let
tree = builtins.fetchTree { type = "file"; url = "file://$PWD/test_input"; };
in
assert (tree.narHash == "$input_hash");
tree
EOF
}
# Make sure that `http(s)` and `file` flake inputs are properly extracted when
# they should be, and treated as opaque files when they should be
test_file_flake_input () {
rm -fr "$TEST_ROOT/testFlake";
mkdir "$TEST_ROOT/testFlake";
pushd testFlake
mkdir inputs
echo foo > inputs/test_input_file
echo '{ outputs = { self }: { }; }' > inputs/flake.nix
tar cfa test_input.tar.gz inputs
cp test_input.tar.gz test_input_no_ext
input_tarball_hash="$(nix hash path test_input.tar.gz)"
input_directory_hash="$(nix hash path inputs)"
cat <<EOF > flake.nix
{
inputs.no_ext_default_no_unpack = {
url = "file://$PWD/test_input_no_ext";
flake = false;
};
inputs.no_ext_explicit_unpack = {
url = "tarball+file://$PWD/test_input_no_ext";
flake = false;
};
inputs.tarball_default_unpack = {
url = "file://$PWD/test_input.tar.gz";
flake = false;
};
inputs.tarball_explicit_no_unpack = {
url = "file+file://$PWD/test_input.tar.gz";
flake = false;
};
inputs.flake_no_ext = {
url = "file://$PWD/test_input_no_ext";
};
outputs = { ... }: {};
}
EOF
nix flake update
nix eval --file - <<EOF
with (builtins.fromJSON (builtins.readFile ./flake.lock));
# Non-flake inputs whose extension doesnt match a known archive format should
# not be unpacked by default
assert (nodes.no_ext_default_no_unpack.locked.type == "file");
assert (nodes.no_ext_default_no_unpack.locked.unpack or false == false);
assert (nodes.no_ext_default_no_unpack.locked.narHash == "$input_tarball_hash");
# For backwards compatibility, flake inputs that correspond to the
# old 'tarball' fetcher should still have their type set to 'tarball'
assert (nodes.tarball_default_unpack.locked.type == "tarball");
# Unless explicitely specified, the 'unpack' parameter shouldnt appear here
# because that would break older Nix implementation versions
assert (!nodes.tarball_default_unpack.locked ? unpack);
assert (nodes.tarball_default_unpack.locked.narHash == "$input_directory_hash");
# Explicitely passing the unpack parameter should enforce the desired behavior
assert (nodes.no_ext_explicit_unpack.locked.narHash == nodes.tarball_default_unpack.locked.narHash);
assert (nodes.tarball_explicit_no_unpack.locked.narHash == nodes.no_ext_default_no_unpack.locked.narHash);
# Flake inputs should always be tarballs
assert (nodes.flake_no_ext.locked.type == "tarball");
true
EOF
# Test tarball URLs on the command line.
[[ $(nix flake metadata --json file://$PWD/test_input_no_ext | jq -r .resolved.type) = tarball ]]
popd
[[ -z "${NIX_DAEMON_PACKAGE-}" ]] && return 0
# Ensure that a lockfile generated by the current Nix for tarball inputs
# can still be read by an older Nix implementation
cat <<EOF > flake.nix
{
inputs.tarball = {
url = "file://$PWD/test_input.tar.gz";
flake = false;
};
outputs = { self, tarball }: {
foo = builtins.readFile "\${tarball}/test_input_file";
};
}
nix flake update
clearStore
"$NIX_DAEMON_PACKAGE/bin/nix" eval .#foo
EOF
}
test_fetch_file
test_file_flake_input