aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nix-collect-garbage/nix-collect-garbage.cc7
-rw-r--r--tests/gc.sh17
2 files changed, 20 insertions, 4 deletions
diff --git a/src/nix-collect-garbage/nix-collect-garbage.cc b/src/nix-collect-garbage/nix-collect-garbage.cc
index 3cc57af4e..cb1f42e35 100644
--- a/src/nix-collect-garbage/nix-collect-garbage.cc
+++ b/src/nix-collect-garbage/nix-collect-garbage.cc
@@ -77,7 +77,12 @@ static int main_nix_collect_garbage(int argc, char * * argv)
return true;
});
- if (removeOld) removeOldGenerations(profilesDir());
+ if (removeOld) {
+ std::set<Path> dirsToClean = {
+ profilesDir(), settings.nixStateDir + "/profiles", dirOf(getDefaultProfile())};
+ for (auto & dir : dirsToClean)
+ removeOldGenerations(dir);
+ }
// Run the actual garbage collector.
if (!dryRun) {
diff --git a/tests/gc.sh b/tests/gc.sh
index 98d6cb032..95669e25c 100644
--- a/tests/gc.sh
+++ b/tests/gc.sh
@@ -52,9 +52,7 @@ rmdir $NIX_STORE_DIR/.links
rmdir $NIX_STORE_DIR
## Test `nix-collect-garbage -d`
-# `nix-env` doesn't work with CA derivations, so let's ignore that bit if we're
-# using them
-if [[ -z "${NIX_TESTS_CA_BY_DEFAULT:-}" ]]; then
+testCollectGarbageD () {
clearProfiles
# Run two `nix-env` commands, should create two generations of
# the profile
@@ -66,4 +64,17 @@ if [[ -z "${NIX_TESTS_CA_BY_DEFAULT:-}" ]]; then
# left
nix-collect-garbage -d
[[ $(nix-env --list-generations | wc -l) -eq 1 ]]
+}
+# `nix-env` doesn't work with CA derivations, so let's ignore that bit if we're
+# using them
+if [[ -z "${NIX_TESTS_CA_BY_DEFAULT:-}" ]]; then
+ testCollectGarbageD
+
+ # Run the same test, but forcing the profiles at their legacy location under
+ # /nix/var/nix.
+ #
+ # Regression test for #8294
+ rm ~/.nix-profile
+ ln -s $NIX_STATE_DIR/profiles/per-user/me ~/.nix-profile
+ testCollectGarbageD
fi