forked from lix-project/lix
ca8caaec5e
This replaces the '(...)' installable syntax, which is not very discoverable. The downside is that you can't have multiple expressions or mix expressions and other installables.
70 lines
1.4 KiB
Bash
70 lines
1.4 KiB
Bash
source common.sh
|
|
|
|
clearStore
|
|
|
|
garbage1=$(nix add-to-store --name garbage1 ./nar-access.sh)
|
|
garbage2=$(nix add-to-store --name garbage2 ./nar-access.sh)
|
|
garbage3=$(nix add-to-store --name garbage3 ./nar-access.sh)
|
|
|
|
ls -l $garbage3
|
|
POSIXLY_CORRECT=1 du $garbage3
|
|
|
|
fake_free=$TEST_ROOT/fake-free
|
|
export _NIX_TEST_FREE_SPACE_FILE=$fake_free
|
|
echo 1100 > $fake_free
|
|
|
|
expr=$(cat <<EOF
|
|
with import ./config.nix; mkDerivation {
|
|
name = "gc-A";
|
|
buildCommand = ''
|
|
set -x
|
|
[[ \$(ls \$NIX_STORE/*-garbage? | wc -l) = 3 ]]
|
|
mkdir \$out
|
|
echo foo > \$out/bar
|
|
echo 1...
|
|
sleep 2
|
|
echo 200 > ${fake_free}.tmp1
|
|
mv ${fake_free}.tmp1 $fake_free
|
|
echo 2...
|
|
sleep 2
|
|
echo 3...
|
|
sleep 2
|
|
echo 4...
|
|
[[ \$(ls \$NIX_STORE/*-garbage? | wc -l) = 1 ]]
|
|
'';
|
|
}
|
|
EOF
|
|
)
|
|
|
|
expr2=$(cat <<EOF
|
|
with import ./config.nix; mkDerivation {
|
|
name = "gc-B";
|
|
buildCommand = ''
|
|
set -x
|
|
mkdir \$out
|
|
echo foo > \$out/bar
|
|
echo 1...
|
|
sleep 2
|
|
echo 200 > ${fake_free}.tmp2
|
|
mv ${fake_free}.tmp2 $fake_free
|
|
echo 2...
|
|
sleep 2
|
|
echo 3...
|
|
sleep 2
|
|
echo 4...
|
|
'';
|
|
}
|
|
EOF
|
|
)
|
|
|
|
nix build --impure -v -o $TEST_ROOT/result-A -L --expr "$expr" \
|
|
--min-free 1000 --max-free 2000 --min-free-check-interval 1 &
|
|
pid=$!
|
|
|
|
nix build --impure -v -o $TEST_ROOT/result-B -L --expr "$expr2" \
|
|
--min-free 1000 --max-free 2000 --min-free-check-interval 1
|
|
|
|
wait "$pid"
|
|
|
|
[[ foo = $(cat $TEST_ROOT/result-A/bar) ]]
|
|
[[ foo = $(cat $TEST_ROOT/result-B/bar) ]]
|