~ruther/guix-local

d26eb84d140af8d2119509d7da440b4f035608c5 — Ludovic Courtès 11 years ago 381ac93
guix package: Never remove the current generation and warn about it.

Fixes <http://bugs.gnu.org/19978>.
Reported by taylanbayirli@gmail.com (Taylan Ulrich Bayırlı/Kammer).

* guix/scripts/package.scm (delete-matching-generations): Warn when
  CURRENT is in NUMBERS, and always remove it before calling
  'delete-generations'.
* tests/guix-package.sh: Add --switch-generation=2 invocation before
  --delete-generations=3 invocation.
  Add --delete-generations=1.. test case.
2 files changed, 21 insertions(+), 3 deletions(-)

M guix/scripts/package.scm
M tests/guix-package.sh
M guix/scripts/package.scm => guix/scripts/package.scm +10 -3
@@ 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)))))


M tests/guix-package.sh => tests/guix-package.sh +11 -0
@@ 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"