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:
parent
6237b9fa39
commit
3a96d7c3dd
|
@ -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
|
||||||
|
|
|
@ -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`"
|
||||||
|
|
Loading…
Reference in New Issue