~ruther/guix-local

3a96d7c3dd864e4312df723ea54c2f710f55380c — Ludovic Courtès 10 years ago 6237b9f
guix gc: Error out when extra arguments are passed.

Fixes <http://bugs.gnu.org/21817>.
Reported by Petter Berntsen <petter@mykolab.ch>.

* guix/scripts/gc.scm (guix-gc)[assert-no-extra-arguments]: New
  procedure.
  Use it for actions 'collect-garbage', 'optimize', and 'verify'.
* tests/guix-gc.sh: Add tests.
2 files changed, 14 insertions(+), 1 deletions(-)

M guix/scripts/gc.scm
M tests/guix-gc.sh
M guix/scripts/gc.scm => guix/scripts/gc.scm +7 -0
@@ 182,6 182,10 @@ Invoke the garbage collector.\n"))
                               (('argument . arg) arg)
                               (_ #f))
                              opts)))
      (define (assert-no-extra-arguments)
        (unless (null? paths)
          (leave (_ "extraneous arguments: ~{~a ~}~%") paths)))

      (define (list-relatives relatives)
        (for-each (compose (lambda (path)
                             (for-each (cut simple-format #t "~a~%" <>)


@@ 192,6 196,7 @@ Invoke the garbage collector.\n"))

      (case (assoc-ref opts 'action)
        ((collect-garbage)
         (assert-no-extra-arguments)
         (let ((min-freed (assoc-ref opts 'min-freed)))
           (if min-freed
               (collect-garbage store min-freed)


@@ 205,8 210,10 @@ Invoke the garbage collector.\n"))
        ((list-referrers)
         (list-relatives referrers))
        ((optimize)
         (assert-no-extra-arguments)
         (optimize-store store))
        ((verify)
         (assert-no-extra-arguments)
         (let ((options (assoc-ref opts 'verify-options)))
           (exit
            (verify-store store

M tests/guix-gc.sh => tests/guix-gc.sh +7 -1
@@ 1,5 1,5 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
#
# This file is part of GNU Guix.
#


@@ 25,6 25,12 @@ guix gc --version
trap "rm -f guix-gc-root" EXIT
rm -f guix-gc-root

# For some operations, passing extra arguments is an error.
for option in "" "-C 500M" "--verify" "--optimize"
do
    if guix gc $option whatever; then false; else true; fi
done

# Check the references of a .drv.
drv="`guix build guile-bootstrap -d`"
out="`guix build guile-bootstrap`"