Split off the circular flake import tests

This commit is contained in:
Eelco Dolstra 2022-07-13 20:16:39 +02:00
parent c591efafd3
commit f011c269c9
4 changed files with 74 additions and 61 deletions

49
tests/flakes/circular.sh Normal file
View file

@ -0,0 +1,49 @@
# Test circular flake dependencies.
source ./common.sh
requireGit
flakeA=$TEST_ROOT/flakeA
flakeB=$TEST_ROOT/flakeB
createGitRepo $flakeA
createGitRepo $flakeB
cat > $flakeA/flake.nix <<EOF
{
inputs.b.url = git+file://$flakeB;
inputs.b.inputs.a.follows = "/";
outputs = { self, b }: {
foo = 123 + b.bar;
xyzzy = 1000;
};
}
EOF
git -C $flakeA add flake.nix
cat > $flakeB/flake.nix <<EOF
{
inputs.a.url = git+file://$flakeA;
outputs = { self, a }: {
bar = 456 + a.xyzzy;
};
}
EOF
git -C $flakeB add flake.nix
git -C $flakeB commit -a -m 'Foo'
[[ $(nix eval $flakeA#foo) = 1579 ]]
[[ $(nix eval $flakeA#foo) = 1579 ]]
sed -i $flakeB/flake.nix -e 's/456/789/'
git -C $flakeB commit -a -m 'Foo'
[[ $(nix eval --update-input b $flakeA#foo) = 1912 ]]
# Test list-inputs with circular dependencies
nix flake metadata $flakeA

View file

@ -2,6 +2,13 @@ source ../common.sh
registry=$TEST_ROOT/registry.json registry=$TEST_ROOT/registry.json
requireGit() {
if [[ -z $(type -p git) ]]; then
echo "Git not installed; skipping flake tests"
exit 99
fi
}
writeSimpleFlake() { writeSimpleFlake() {
local flakeDir="$1" local flakeDir="$1"
cat > $flakeDir/flake.nix <<EOF cat > $flakeDir/flake.nix <<EOF
@ -34,3 +41,15 @@ writeDependentFlake() {
} }
EOF EOF
} }
createGitRepo() {
local repo="$1"
local extraArgs="$2"
rm -rf $repo $repo.tmp
mkdir -p $repo
git -C $repo init $extraArgs
git -C $repo config user.email "foobar@example.com"
git -C $repo config user.name "Foobar"
}

View file

@ -1,9 +1,6 @@
source ./common.sh source ./common.sh
if [[ -z $(type -p git) ]]; then requireGit
echo "Git not installed; skipping flake tests"
exit 99
fi
clearStore clearStore
rm -rf $TEST_HOME/.cache $TEST_HOME/.config rm -rf $TEST_HOME/.cache $TEST_HOME/.config
@ -17,8 +14,6 @@ flake7Dir=$TEST_ROOT/flake7
templatesDir=$TEST_ROOT/templates templatesDir=$TEST_ROOT/templates
nonFlakeDir=$TEST_ROOT/nonFlake nonFlakeDir=$TEST_ROOT/nonFlake
badFlakeDir=$TEST_ROOT/badFlake badFlakeDir=$TEST_ROOT/badFlake
flakeA=$TEST_ROOT/flakeA
flakeB=$TEST_ROOT/flakeB
flakeGitBare=$TEST_ROOT/flakeGitBare flakeGitBare=$TEST_ROOT/flakeGitBare
flakeFollowsA=$TEST_ROOT/follows/flakeA flakeFollowsA=$TEST_ROOT/follows/flakeA
flakeFollowsB=$TEST_ROOT/follows/flakeA/flakeB flakeFollowsB=$TEST_ROOT/follows/flakeA/flakeB
@ -26,26 +21,14 @@ flakeFollowsC=$TEST_ROOT/follows/flakeA/flakeB/flakeC
flakeFollowsD=$TEST_ROOT/follows/flakeA/flakeD flakeFollowsD=$TEST_ROOT/follows/flakeA/flakeD
flakeFollowsE=$TEST_ROOT/follows/flakeA/flakeE flakeFollowsE=$TEST_ROOT/follows/flakeA/flakeE
initRepo() { for repo in $flake1Dir $flake2Dir $flake3Dir $flake7Dir $templatesDir $nonFlakeDir $flakeFollowsA; do
local repo="$1"
local extraArgs="$2"
git -C $repo init $extraArgs
git -C $repo config user.email "foobar@example.com"
git -C $repo config user.name "Foobar"
}
for repo in $flake1Dir $flake2Dir $flake3Dir $flake7Dir $templatesDir $nonFlakeDir $flakeA $flakeB $flakeFollowsA; do
rm -rf $repo $repo.tmp
mkdir -p $repo
# Give one repo a non-main initial branch. # Give one repo a non-main initial branch.
extraArgs= extraArgs=
if [[ $repo == $flake2Dir ]]; then if [[ $repo == $flake2Dir ]]; then
extraArgs="--initial-branch=main" extraArgs="--initial-branch=main"
fi fi
initRepo "$repo" "$extraArgs" createGitRepo "$repo" "$extraArgs"
done done
writeSimpleFlake $flake1Dir writeSimpleFlake $flake1Dir
@ -416,12 +399,12 @@ nix flake show $flake7Dir --json | jq
git -C $flake7Dir commit -a -m 'Initial' git -C $flake7Dir commit -a -m 'Initial'
# Test 'nix flake init' with benign conflicts # Test 'nix flake init' with benign conflicts
rm -rf $flake7Dir && mkdir $flake7Dir && initRepo "$flake7Dir" createGitRepo "$flake7Dir"
echo a > $flake7Dir/a echo a > $flake7Dir/a
(cd $flake7Dir && nix flake init) # check idempotence (cd $flake7Dir && nix flake init) # check idempotence
# Test 'nix flake init' with conflicts # Test 'nix flake init' with conflicts
rm -rf $flake7Dir && mkdir $flake7Dir && initRepo "$flake7Dir" createGitRepo "$flake7Dir"
echo b > $flake7Dir/a echo b > $flake7Dir/a
pushd $flake7Dir pushd $flake7Dir
(! nix flake init) |& grep "refusing to overwrite existing file '$flake7Dir/a'" (! nix flake init) |& grep "refusing to overwrite existing file '$flake7Dir/a'"
@ -641,45 +624,6 @@ nix flake lock $flake3Dir --update-input flake2/flake1
# Test 'nix flake metadata --json'. # Test 'nix flake metadata --json'.
nix flake metadata $flake3Dir --json | jq . nix flake metadata $flake3Dir --json | jq .
# Test circular flake dependencies.
cat > $flakeA/flake.nix <<EOF
{
inputs.b.url = git+file://$flakeB;
inputs.b.inputs.a.follows = "/";
outputs = { self, nixpkgs, b }: {
foo = 123 + b.bar;
xyzzy = 1000;
};
}
EOF
git -C $flakeA add flake.nix
cat > $flakeB/flake.nix <<EOF
{
inputs.a.url = git+file://$flakeA;
outputs = { self, nixpkgs, a }: {
bar = 456 + a.xyzzy;
};
}
EOF
git -C $flakeB add flake.nix
git -C $flakeB commit -a -m 'Foo'
[[ $(nix eval $flakeA#foo) = 1579 ]]
[[ $(nix eval $flakeA#foo) = 1579 ]]
sed -i $flakeB/flake.nix -e 's/456/789/'
git -C $flakeB commit -a -m 'Foo'
[[ $(nix eval --update-input b $flakeA#foo) = 1912 ]]
# Test list-inputs with circular dependencies
nix flake metadata $flakeA
# Test flake follow paths # Test flake follow paths
mkdir -p $flakeFollowsB mkdir -p $flakeFollowsB
mkdir -p $flakeFollowsC mkdir -p $flakeFollowsC

View file

@ -2,6 +2,7 @@ nix_tests = \
flakes/flakes.sh \ flakes/flakes.sh \
flakes/run.sh \ flakes/run.sh \
flakes/mercurial.sh \ flakes/mercurial.sh \
flakes/circular.sh \
ca/gc.sh \ ca/gc.sh \
gc.sh \ gc.sh \
remote-store.sh \ remote-store.sh \