guix gc: '--verify=foo' is reported as an error.

Fixes <https://bugs.gnu.org/29761>.
Reported by Martin Castillo <castilma@uni-bremen.de>.

* guix/scripts/gc.scm (argument->verify-options): New procedure.
(%options) ["verify"]: Adjust to use it.
* tests/guix-gc.sh: Add test.
This commit is contained in:
Ludovic Courtès 2017-12-18 22:33:51 +01:00
parent 147d42fc03
commit 3caab236c4
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 24 additions and 10 deletions

View File

@ -78,6 +78,21 @@ Invoke the garbage collector.\n"))
(newline) (newline)
(show-bug-report-information)) (show-bug-report-information))
(define argument->verify-options
(let ((not-comma (char-set-complement (char-set #\,)))
(validate (lambda (option)
(unless (memq option '(repair contents))
(leave (G_ "~a: invalid '--verify' option~%")
option)))))
(lambda (arg)
"Turn ARG into a list of symbols denoting '--verify' options."
(if arg
(let ((lst (map string->symbol
(string-tokenize arg not-comma))))
(for-each validate lst)
lst)
'()))))
(define %options (define %options
;; Specification of the command-line options. ;; Specification of the command-line options.
(list (option '(#\h "help") #f #f (list (option '(#\h "help") #f #f
@ -112,16 +127,12 @@ Invoke the garbage collector.\n"))
(alist-cons 'action 'optimize (alist-cons 'action 'optimize
(alist-delete 'action result)))) (alist-delete 'action result))))
(option '("verify") #f #t (option '("verify") #f #t
(let ((not-comma (char-set-complement (char-set #\,))))
(lambda (opt name arg result) (lambda (opt name arg result)
(let ((options (if arg (let ((options (argument->verify-options arg)))
(map string->symbol
(string-tokenize arg not-comma))
'())))
(alist-cons 'action 'verify (alist-cons 'action 'verify
(alist-cons 'verify-options options (alist-cons 'verify-options options
(alist-delete 'action (alist-delete 'action
result))))))) result))))))
(option '("list-dead") #f #f (option '("list-dead") #f #f
(lambda (opt name arg result) (lambda (opt name arg result)
(alist-cons 'action 'list-dead (alist-cons 'action 'list-dead

View File

@ -39,6 +39,9 @@ do
if guix gc $option whatever; then false; else true; fi if guix gc $option whatever; then false; else true; fi
done done
# This should fail.
if guix gc --verify=foo; then false; else true; fi
# 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`"