Add Mercurial tests
This commit is contained in:
parent
cc22cf662b
commit
5046233b5a
3 changed files with 69 additions and 6 deletions
|
@ -509,7 +509,14 @@ LockedFlake lockFlake(
|
||||||
if (settings.warnDirty)
|
if (settings.warnDirty)
|
||||||
warn("will not write lock file of flake '%s' because it has a mutable input", topRef);
|
warn("will not write lock file of flake '%s' because it has a mutable input", topRef);
|
||||||
} else {
|
} else {
|
||||||
newLockFile.write(*sourcePath + (topRef.subdir == "" ? "" : "/" + topRef.subdir) + "/flake.lock");
|
auto path = *sourcePath + (topRef.subdir == "" ? "" : "/" + topRef.subdir) + "/flake.lock";
|
||||||
|
|
||||||
|
if (pathExists(path))
|
||||||
|
warn("updating lock file '%s'", path);
|
||||||
|
else
|
||||||
|
warn("creating lock file '%s'", path);
|
||||||
|
|
||||||
|
newLockFile.write(path);
|
||||||
|
|
||||||
// FIXME: rewriting the lockfile changed the
|
// FIXME: rewriting the lockfile changed the
|
||||||
// top-level repo, so we should re-read it.
|
// top-level repo, so we should re-read it.
|
||||||
|
|
|
@ -89,6 +89,8 @@ struct MercurialInput : Input
|
||||||
|
|
||||||
// FIXME: return lastModified.
|
// FIXME: return lastModified.
|
||||||
|
|
||||||
|
// FIXME: don't clone local repositories.
|
||||||
|
|
||||||
if (!input->ref && !input->rev && isLocal && pathExists(actualUrl + "/.hg")) {
|
if (!input->ref && !input->rev && isLocal && pathExists(actualUrl + "/.hg")) {
|
||||||
|
|
||||||
bool clean = runProgram("hg", true, { "status", "-R", actualUrl, "--modified", "--added", "--removed" }) == "";
|
bool clean = runProgram("hg", true, { "status", "-R", actualUrl, "--modified", "--added", "--removed" }) == "";
|
||||||
|
|
|
@ -14,6 +14,7 @@ flake1Dir=$TEST_ROOT/flake1
|
||||||
flake2Dir=$TEST_ROOT/flake2
|
flake2Dir=$TEST_ROOT/flake2
|
||||||
flake3Dir=$TEST_ROOT/flake3
|
flake3Dir=$TEST_ROOT/flake3
|
||||||
flake4Dir=$TEST_ROOT/flake4
|
flake4Dir=$TEST_ROOT/flake4
|
||||||
|
flake5Dir=$TEST_ROOT/flake5
|
||||||
flake7Dir=$TEST_ROOT/flake7
|
flake7Dir=$TEST_ROOT/flake7
|
||||||
nonFlakeDir=$TEST_ROOT/nonFlake
|
nonFlakeDir=$TEST_ROOT/nonFlake
|
||||||
|
|
||||||
|
@ -101,6 +102,9 @@ cat > $registry <<EOF
|
||||||
"flake:flake4": {
|
"flake:flake4": {
|
||||||
"url": "flake:flake3"
|
"url": "flake:flake3"
|
||||||
},
|
},
|
||||||
|
"flake:flake5": {
|
||||||
|
"url": "hg+file://$flake5Dir"
|
||||||
|
},
|
||||||
"flake:nixpkgs": {
|
"flake:nixpkgs": {
|
||||||
"url": "flake:flake1"
|
"url": "flake:flake1"
|
||||||
}
|
}
|
||||||
|
@ -110,7 +114,7 @@ cat > $registry <<EOF
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Test 'nix flake list'.
|
# Test 'nix flake list'.
|
||||||
(( $(nix flake list --flake-registry $registry | wc -l) == 5 ))
|
(( $(nix flake list --flake-registry $registry | wc -l) == 6 ))
|
||||||
|
|
||||||
# Test 'nix flake info'.
|
# Test 'nix flake info'.
|
||||||
nix flake info --flake-registry $registry flake1 | grep -q 'URL: .*flake1.*'
|
nix flake info --flake-registry $registry flake1 | grep -q 'URL: .*flake1.*'
|
||||||
|
@ -142,7 +146,8 @@ nix build -o $flake1Dir/result --flake-registry $registry git+file://$flake1Dir
|
||||||
nix path-info $flake1Dir/result
|
nix path-info $flake1Dir/result
|
||||||
|
|
||||||
# Building a flake with an unlocked dependency should fail in pure mode.
|
# Building a flake with an unlocked dependency should fail in pure mode.
|
||||||
(! nix eval "(builtins.getFlake "$flake2Dir")")
|
(! nix build -o $TEST_ROOT/result --flake-registry $registry flake2#bar --no-registries)
|
||||||
|
(! nix eval --expr "builtins.getFlake \"$flake2Dir\"")
|
||||||
|
|
||||||
# But should succeed in impure mode.
|
# But should succeed in impure mode.
|
||||||
nix build -o $TEST_ROOT/result --flake-registry $registry flake2#bar --impure
|
nix build -o $TEST_ROOT/result --flake-registry $registry flake2#bar --impure
|
||||||
|
@ -159,6 +164,7 @@ nix build -o $TEST_ROOT/result --flake-registry $registry $flake2Dir#bar
|
||||||
|
|
||||||
# Building with a lockfile should not require a fetch of the registry.
|
# Building with a lockfile should not require a fetch of the registry.
|
||||||
nix build -o $TEST_ROOT/result --flake-registry file:///no-registry.json $flake2Dir#bar --tarball-ttl 0
|
nix build -o $TEST_ROOT/result --flake-registry file:///no-registry.json $flake2Dir#bar --tarball-ttl 0
|
||||||
|
nix build -o $TEST_ROOT/result --no-registries $flake2Dir#bar --tarball-ttl 0
|
||||||
|
|
||||||
# Updating the flake should not change the lockfile.
|
# Updating the flake should not change the lockfile.
|
||||||
nix flake update --flake-registry $registry $flake2Dir
|
nix flake update --flake-registry $registry $flake2Dir
|
||||||
|
@ -344,11 +350,11 @@ nix build -o $TEST_ROOT/result --flake-registry $registry flake4/removeXyzzy#sth
|
||||||
|
|
||||||
# Testing the nix CLI
|
# Testing the nix CLI
|
||||||
nix flake add --flake-registry $registry flake1 flake3
|
nix flake add --flake-registry $registry flake1 flake3
|
||||||
(( $(nix flake list --flake-registry $registry | wc -l) == 6 ))
|
(( $(nix flake list --flake-registry $registry | wc -l) == 7 ))
|
||||||
nix flake pin --flake-registry $registry flake1
|
nix flake pin --flake-registry $registry flake1
|
||||||
(( $(nix flake list --flake-registry $registry | wc -l) == 6 ))
|
(( $(nix flake list --flake-registry $registry | wc -l) == 7 ))
|
||||||
nix flake remove --flake-registry $registry flake1
|
nix flake remove --flake-registry $registry flake1
|
||||||
(( $(nix flake list --flake-registry $registry | wc -l) == 5 ))
|
(( $(nix flake list --flake-registry $registry | wc -l) == 6 ))
|
||||||
|
|
||||||
# Test 'nix flake init'.
|
# Test 'nix flake init'.
|
||||||
(cd $flake7Dir && nix flake init)
|
(cd $flake7Dir && nix flake init)
|
||||||
|
@ -519,3 +525,51 @@ EOF
|
||||||
|
|
||||||
nix flake update --flake-registry $registry $flake3Dir --recreate-lock-file
|
nix flake update --flake-registry $registry $flake3Dir --recreate-lock-file
|
||||||
[[ $(jq .inputs.flake2.inputs.flake1.url $flake3Dir/flake.lock) =~ flake7 ]]
|
[[ $(jq .inputs.flake2.inputs.flake1.url $flake3Dir/flake.lock) =~ flake7 ]]
|
||||||
|
|
||||||
|
# Test Mercurial flakes.
|
||||||
|
if [[ -z $(type -p hg) ]]; then
|
||||||
|
echo "Git not installed; skipping Mercurial flake tests"
|
||||||
|
exit 99
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf $flake5Dir
|
||||||
|
hg init $flake5Dir
|
||||||
|
|
||||||
|
cat > $flake5Dir/flake.nix <<EOF
|
||||||
|
{
|
||||||
|
edition = 201909;
|
||||||
|
|
||||||
|
outputs = { self, flake1 }: {
|
||||||
|
defaultPackage.$system = flake1.defaultPackage.$system;
|
||||||
|
|
||||||
|
expr = assert builtins.pathExists ./flake.lock; 123;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
hg add $flake5Dir/flake.nix
|
||||||
|
hg commit --config ui.username=foobar@example.org $flake5Dir -m 'Initial commit'
|
||||||
|
|
||||||
|
nix build -o $TEST_ROOT/result --flake-registry $registry hg+file://$flake5Dir
|
||||||
|
[[ -e $TEST_ROOT/result/hello ]]
|
||||||
|
|
||||||
|
nix flake info --flake-registry $registry --json hg+file://$flake5Dir | jq -e -r .revision
|
||||||
|
|
||||||
|
# This will fail because flake.lock is not tracked by Mercurial.
|
||||||
|
(! nix eval --flake-registry $registry hg+file://$flake5Dir#expr)
|
||||||
|
|
||||||
|
hg add $flake5Dir/flake.lock
|
||||||
|
|
||||||
|
nix eval --flake-registry $registry hg+file://$flake5Dir#expr
|
||||||
|
|
||||||
|
(! nix eval --flake-registry $registry hg+file://$flake5Dir#expr --no-allow-dirty)
|
||||||
|
|
||||||
|
(! nix flake info --flake-registry $registry --json hg+file://$flake5Dir | jq -e -r .revision)
|
||||||
|
|
||||||
|
hg commit --config ui.username=foobar@example.org $flake5Dir -m 'Add lock file'
|
||||||
|
|
||||||
|
nix flake info --flake-registry $registry --json hg+file://$flake5Dir --refresh | jq -e -r .revision
|
||||||
|
nix flake info --flake-registry $registry --json hg+file://$flake5Dir
|
||||||
|
[[ $(nix flake info --flake-registry $registry --json hg+file://$flake5Dir | jq -e -r .revCount) = 1 ]]
|
||||||
|
|
||||||
|
nix build -o $TEST_ROOT/result hg+file://$flake5Dir --no-registries --no-allow-dirty
|
||||||
|
|
Loading…
Reference in a new issue