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.
This commit is contained in:
Ludovic Courtès 2015-11-11 23:05:43 +01:00
parent 6237b9fa39
commit 3a96d7c3dd
2 changed files with 14 additions and 1 deletions

View File

@ -182,6 +182,10 @@ Invoke the garbage collector.\n"))
(('argument . arg) arg) (('argument . arg) arg)
(_ #f)) (_ #f))
opts))) opts)))
(define (assert-no-extra-arguments)
(unless (null? paths)
(leave (_ "extraneous arguments: ~{~a ~}~%") paths)))
(define (list-relatives relatives) (define (list-relatives relatives)
(for-each (compose (lambda (path) (for-each (compose (lambda (path)
(for-each (cut simple-format #t "~a~%" <>) (for-each (cut simple-format #t "~a~%" <>)
@ -192,6 +196,7 @@ Invoke the garbage collector.\n"))
(case (assoc-ref opts 'action) (case (assoc-ref opts 'action)
((collect-garbage) ((collect-garbage)
(assert-no-extra-arguments)
(let ((min-freed (assoc-ref opts 'min-freed))) (let ((min-freed (assoc-ref opts 'min-freed)))
(if min-freed (if min-freed
(collect-garbage store min-freed) (collect-garbage store min-freed)
@ -205,8 +210,10 @@ Invoke the garbage collector.\n"))
((list-referrers) ((list-referrers)
(list-relatives referrers)) (list-relatives referrers))
((optimize) ((optimize)
(assert-no-extra-arguments)
(optimize-store store)) (optimize-store store))
((verify) ((verify)
(assert-no-extra-arguments)
(let ((options (assoc-ref opts 'verify-options))) (let ((options (assoc-ref opts 'verify-options)))
(exit (exit
(verify-store store (verify-store store

View File

@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU # 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. # This file is part of GNU Guix.
# #
@ -25,6 +25,12 @@ guix gc --version
trap "rm -f guix-gc-root" EXIT trap "rm -f guix-gc-root" EXIT
rm -f guix-gc-root 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. # Check the references of a .drv.
drv="`guix build guile-bootstrap -d`" drv="`guix build guile-bootstrap -d`"
out="`guix build guile-bootstrap`" out="`guix build guile-bootstrap`"