diff options
-rw-r--r-- | guix/scripts/package.scm | 13 | ||||
-rw-r--r-- | tests/guix-package.sh | 11 |
2 files changed, 21 insertions, 3 deletions
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 7074243ed9..3a7afb724b 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -254,9 +254,16 @@ denote ranges as interpreted by 'matching-derivations'." #:duration-relation >) => (lambda (numbers) - (if (null-list? numbers) - (exit 1) - (delete-generations (%store) profile numbers)))) + (when (memv current numbers) + (warning (_ "not removing generation ~a, which is current~%") + current)) + + ;; Make sure we don't inadvertently remove the current + ;; generation. + (let ((numbers (delv current numbers))) + (if (null-list? numbers) + (exit 1) + (delete-generations (%store) profile numbers))))) (else (leave (_ "invalid syntax: ~a~%") pattern))))) diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 94cf927420..a4c04255ba 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -161,6 +161,9 @@ then guix package --bootstrap -p "$profile" -i guile-bootstrap -i gcc-bootstrap guix package --search-paths -p "$profile" | grep LIBRARY_PATH + # Roll back so we can delete #3 below. + guix package -p "$profile" --switch-generation=2 + # Delete the third generation and check that it was actually deleted. guix package -p "$profile" --delete-generations=3 test -z "`guix package -p "$profile" -l 3`" @@ -212,6 +215,14 @@ if guix package -p "$profile" --delete-generations=12m; then false; else true; fi test "`readlink_base "$profile"`" = "$generation" +# The following command should not delete the current generation, even though +# it matches the given pattern (see <http://bugs.gnu.org/19978>.) And since +# there's nothing else to delete, it should just fail. +guix package --list-generations -p "$profile" +if guix package --bootstrap -p "$profile" --delete-generations=1.. +then false; else true; fi +test "`readlink_base "$profile"`" = "$generation" + # Make sure $profile is a GC root at this point. real_profile="`readlink -f "$profile"`" if guix gc -d "$real_profile" |