mirror of
https://github.com/NixOS/nix.git
synced 2025-11-08 19:46:02 +01:00
Resolve the derivation before creating a building goal, in a context
where we know what output(s) we want. That way we have a chance just to
download the outputs we want.
Fix #13247
(cherry picked from commit 39f6fd9b46)
68 lines
2.1 KiB
Bash
Executable file
68 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# https://github.com/NixOS/nix/issues/13247
|
|
|
|
export NIX_TESTS_CA_BY_DEFAULT=1
|
|
|
|
source common.sh
|
|
|
|
clearStoreIfPossible
|
|
|
|
set -x
|
|
|
|
# Build derivation (both outputs)
|
|
nix build -f issue-13247.nix --json a a-prime use-a-more-outputs --no-link > "$TEST_ROOT"/a.json
|
|
|
|
cache="file://$TEST_ROOT/cache"
|
|
|
|
# Copy all outputs and realisations to cache
|
|
declare -a drvs
|
|
for d in "$NIX_STORE_DIR"/*-issue-13247-a.drv "$NIX_STORE_DIR"/*-use-a-more-outputs.drv; do
|
|
drvs+=("$d" "$d"^*)
|
|
done
|
|
nix copy --to "$cache" "${drvs[@]}"
|
|
|
|
function delete () {
|
|
# Delete local copy
|
|
# shellcheck disable=SC2046
|
|
nix-store --delete \
|
|
$(jq -r <"$TEST_ROOT"/a.json '.[] | .drvPath, .outputs.[]') \
|
|
"$NIX_STORE_DIR"/*-issue-13247-a.drv \
|
|
"$NIX_STORE_DIR"/*-use-a-more-outputs.drv
|
|
|
|
[[ ! -e "$(jq -r <"$TEST_ROOT"/a.json '.[0].outputs.out')" ]]
|
|
[[ ! -e "$(jq -r <"$TEST_ROOT"/a.json '.[1].outputs.out')" ]]
|
|
[[ ! -e "$(jq -r <"$TEST_ROOT"/a.json '.[2].outputs.first')" ]]
|
|
[[ ! -e "$(jq -r <"$TEST_ROOT"/a.json '.[2].outputs.second')" ]]
|
|
}
|
|
|
|
delete
|
|
|
|
buildViaSubstitute () {
|
|
nix build -f issue-13247.nix "$1" --no-link --max-jobs 0 --substituters "$cache" --no-require-sigs --offline --substitute
|
|
}
|
|
|
|
# Substitue just the first output
|
|
buildViaSubstitute use-a-more-outputs^first
|
|
|
|
# Should only fetch the output we asked for
|
|
[[ -d "$(jq -r <"$TEST_ROOT"/a.json '.[0].outputs.out')" ]]
|
|
[[ -f "$(jq -r <"$TEST_ROOT"/a.json '.[2].outputs.first')" ]]
|
|
[[ ! -e "$(jq -r <"$TEST_ROOT"/a.json '.[2].outputs.second')" ]]
|
|
|
|
delete
|
|
|
|
# Failure with 2.28 encountered in CI
|
|
requireDaemonNewerThan "2.29"
|
|
|
|
# Substitue just the first output
|
|
#
|
|
# This derivation is the same after normalization, so we should get
|
|
# early cut-off, and thus a chance to download just the output we want
|
|
# rather than building more
|
|
buildViaSubstitute use-a-prime-more-outputs^first
|
|
|
|
# Should only fetch the output we asked for
|
|
[[ -d "$(jq -r <"$TEST_ROOT"/a.json '.[0].outputs.out')" ]]
|
|
[[ -f "$(jq -r <"$TEST_ROOT"/a.json '.[2].outputs.first')" ]]
|
|
[[ ! -e "$(jq -r <"$TEST_ROOT"/a.json '.[2].outputs.second')" ]]
|