diff options
author | Quantum Jump <quantumjump451@gmail.com> | 2024-07-05 20:22:53 +0100 |
---|---|---|
committer | Quantum Jump <quantumjump451@gmail.com> | 2024-07-09 13:55:05 +0000 |
commit | 6e0ca0242579dc6114ccfc2417406372acc3004c (patch) | |
tree | bed94e88cd66b0f1d3bf04bafac707b5b7c2e5d2 /tests | |
parent | accfd8aa9d786831e6e08e92162891e99e11c08a (diff) |
Fix dry-run flag for nix-collect-garbage
`nix-collect-garbage --dry-run` previously elided the entire garbage
collection check, meaning that it would just exit the script without
printing anything.
This change makes the dry run flag instead set the GC action to
`gcReturnDead` rather than `gcDeleteDead`, and then continue with the
script. So if you set `--dry-run`, it will print the paths it *would*
have garbage collected, but not actually delete them.
I filed a bug for this: https://git.lix.systems/lix-project/lix/issues/432 but then realised I could give fixing it a go myself.
Change-Id: I062dbf1a80bbab192b5fd0b3a453a0b555ad16f2
Diffstat (limited to 'tests')
-rw-r--r-- | tests/functional/meson.build | 1 | ||||
-rw-r--r-- | tests/functional/nix-collect-garbage-dry-run.sh | 40 |
2 files changed, 41 insertions, 0 deletions
diff --git a/tests/functional/meson.build b/tests/functional/meson.build index eede1834c..cbf6a1563 100644 --- a/tests/functional/meson.build +++ b/tests/functional/meson.build @@ -73,6 +73,7 @@ functional_tests_scripts = [ 'flakes/flake-in-submodule.sh', 'gc.sh', 'nix-collect-garbage-d.sh', + 'nix-collect-garbage-dry-run.sh', 'remote-store.sh', 'legacy-ssh-store.sh', 'lang.sh', diff --git a/tests/functional/nix-collect-garbage-dry-run.sh b/tests/functional/nix-collect-garbage-dry-run.sh new file mode 100644 index 000000000..00e6f4885 --- /dev/null +++ b/tests/functional/nix-collect-garbage-dry-run.sh @@ -0,0 +1,40 @@ +source common.sh + +clearStore + +## Test `nix-collect-garbage --dry-run` + + +testCollectGarbageDryRun () { + clearProfiles + # Install then uninstall a package + # This should leave packages ready to be garbage collected. + nix-env -f ./user-envs.nix -i foo-1.0 + nix-env -f ./user-envs.nix -e foo-1.0 + + + nix-env --delete-generations old + [[ $(nix-store --gc --print-dead | wc -l) -eq 7 ]] + + nix-collect-garbage --dry-run + [[ $(nix-store --gc --print-dead | wc -l) -eq 7 ]] + +} + +testCollectGarbageDryRun + +# Run the same test, but forcing the profiles an arbitrary location. +rm ~/.nix-profile +ln -s $TEST_ROOT/blah ~/.nix-profile +testCollectGarbageDryRun + +# Run the same test, but forcing the profiles at their legacy location under +# /nix/var/nix. +# +# Note that we *don't* use the default profile; `nix-collect-garbage` will +# need to check the legacy conditional unconditionally not just follow +# `~/.nix-profile` to pass this test. +# +# Regression test for #8294 +rm ~/.nix-profile +testCollectGarbageDryRun --profile "$NIX_STATE_DIR/profiles/per-user/me" |