1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-12-11 03:21:03 +01:00
nix/tests/functional/import-from-derivation.sh
Eelco Dolstra c080c4ca56 builtins.path: Propagate references from derivation outputs
This restores compatibility with Nix 2.18, which behaved this
way. Note that this doesn't scan for the actually visible references.

Unlike in Nix 2.18, we only do this for paths with context, i.e. it
applies to `builtins.storePath "/nix/store/bla..."` but not
`"/nix/store/bla..."`. We don't want the latter because it shouldn't
matter whether a source file happens to be in the Nix store.
2025-12-08 19:16:44 +01:00

64 lines
2.1 KiB
Bash
Executable file

#!/usr/bin/env bash
source common.sh
TODO_NixOS
clearStoreIfPossible
export NIX_PATH=config="${config_nix}"
if nix-instantiate --readonly-mode ./import-from-derivation.nix -A result; then
echo "read-only evaluation of an imported derivation unexpectedly failed"
exit 1
fi
outPath=$(nix-build ./import-from-derivation.nix -A result --no-out-link)
[ "$(cat "$outPath")" = FOO579 ]
# Check that we can have access to the entire closure of a derivation output.
nix build --no-link --restrict-eval -I src=. -f ./import-from-derivation.nix importAddPathExpr -v
# FIXME: the next tests are broken on CA.
if [[ -n "${NIX_TESTS_CA_BY_DEFAULT:-}" ]]; then
exit 0
fi
# Test filterSource on the result of a derivation.
outPath2=$(nix-build ./import-from-derivation.nix -A addPath --no-out-link)
[[ "$(cat "$outPath2")" = BLAFOO579 ]]
# Test that applying builtins.path to the result of a derivation propagates all references
for attr in pathFromDerivation pathFromDerivation2; do
outPath3=$(nix eval --raw -f ./import-from-derivation.nix "$attr")
refs=$(nix path-info --json "$outPath3" | jq -r '.[].references.[]')
[[ $(printf "%s" "$refs" | wc -w) = 2 ]]
[[ $refs =~ -step1 ]]
[[ $refs =~ -symlink ]]
done
# Test that IFD works with a chroot store.
if canUseSandbox; then
store2="$TEST_ROOT/store2"
store2_url="$store2?store=$NIX_STORE_DIR"
# Copy the derivation outputs to the chroot store to avoid having
# to actually build anything, as that would fail due to the lack
# of a shell in the sandbox. We only care about testing the IFD
# semantics.
for i in bar result addPath; do
nix copy --to "$store2_url" --no-check-sigs "$(nix-build ./import-from-derivation.nix -A "$i" --no-out-link)"
done
clearStore
outPath_check=$(nix-build ./import-from-derivation.nix -A result --no-out-link --store "$store2_url")
[[ "$outPath" = "$outPath_check" ]]
[[ ! -e "$outPath" ]]
[[ -e "$store2/nix/store/$(basename "$outPath")" ]]
outPath2_check=$(nix-build ./import-from-derivation.nix -A addPath --no-out-link --store "$store2_url")
[[ "$outPath2" = "$outPath2_check" ]]
fi