guix: scripts: Parse $GUIX_BUILD_OPTIONS separately.
Appending to "raw" args broke optional parameters in 'guix package -I' and 'guix package -A', and possibly other places. Therefore, switch to parsing each set of options on its own and append resulting alists together afterwards. * guix/scripts/archive.scm (parse-options-from): Rename from (parse-options) and add explicit argument. New form of (parse-options) using its old algorithm via -from function. * guix/scripts/build.scm: Ditto. * guix/scripts/environment.scm: Ditto. * guix/scripts/package.scm: Ditto. * guix/scripts/system.scm: Ditto. * tests/guix-package.sh: Add test. * doc/guix.texi (Invoking guix build): Make it clear that the options are parsed independently. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
6496de9bc2
commit
847391fe62
|
@ -2802,7 +2802,8 @@ below:
|
|||
$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
|
||||
@end example
|
||||
|
||||
These options are appended to the ones passed on the command line.
|
||||
These options are parsed independently, and the result is appended to
|
||||
the parsed command-line options.
|
||||
@end defvr
|
||||
|
||||
|
||||
|
|
|
@ -293,8 +293,12 @@ the input port."
|
|||
(define (guix-archive . args)
|
||||
(define (parse-options)
|
||||
;; Return the alist of option values.
|
||||
(args-fold* (append args (environment-build-options))
|
||||
%options
|
||||
(append (parse-options-from args)
|
||||
(parse-options-from (environment-build-options))))
|
||||
|
||||
(define (parse-options-from args)
|
||||
;; Actual parsing takes place here.
|
||||
(args-fold* args %options
|
||||
(lambda (opt name arg result)
|
||||
(leave (_ "~A: unrecognized option~%") name))
|
||||
(lambda (arg result)
|
||||
|
|
|
@ -401,8 +401,12 @@ arguments with packages that use the specified source."
|
|||
(define (guix-build . args)
|
||||
(define (parse-options)
|
||||
;; Return the alist of option values.
|
||||
(args-fold* (append args (environment-build-options))
|
||||
%options
|
||||
(append (parse-options-from args)
|
||||
(parse-options-from (environment-build-options))))
|
||||
|
||||
(define (parse-options-from args)
|
||||
;; Actual parsing takes place here.
|
||||
(args-fold* args %options
|
||||
(lambda (opt name arg result)
|
||||
(leave (_ "~A: unrecognized option~%") name))
|
||||
(lambda (arg result)
|
||||
|
|
|
@ -213,8 +213,13 @@ packages."
|
|||
;; Entry point.
|
||||
(define (guix-environment . args)
|
||||
(define (parse-options)
|
||||
(args-fold* (append args (environment-build-options))
|
||||
%options
|
||||
;; Return the alist of option values.
|
||||
(append (parse-options-from args)
|
||||
(parse-options-from (environment-build-options))))
|
||||
|
||||
(define (parse-options-from args)
|
||||
;; Actual parsing takes place here.
|
||||
(args-fold* args %options
|
||||
(lambda (opt name arg result)
|
||||
(leave (_ "~A: unrecognized option~%") name))
|
||||
(lambda (arg result)
|
||||
|
|
|
@ -668,8 +668,12 @@ removed from MANIFEST."
|
|||
(define (guix-package . args)
|
||||
(define (parse-options)
|
||||
;; Return the alist of option values.
|
||||
(args-fold* (append args (environment-build-options))
|
||||
%options
|
||||
(append (parse-options-from args)
|
||||
(parse-options-from (environment-build-options))))
|
||||
|
||||
(define (parse-options-from args)
|
||||
;; Actual parsing takes place here.
|
||||
(args-fold* args %options
|
||||
(lambda (opt name arg result arg-handler)
|
||||
(leave (_ "~A: unrecognized option~%") name))
|
||||
(lambda (arg result arg-handler)
|
||||
|
|
|
@ -477,8 +477,12 @@ Build the operating system declared in FILE according to ACTION.\n"))
|
|||
(define (guix-system . args)
|
||||
(define (parse-options)
|
||||
;; Return the alist of option values.
|
||||
(args-fold* (append args (environment-build-options))
|
||||
%options
|
||||
(append (parse-options-from args)
|
||||
(parse-options-from (environment-build-options))))
|
||||
|
||||
(define (parse-options-from args)
|
||||
;; Actual parsing takes place here.
|
||||
(args-fold* args %options
|
||||
(lambda (opt name arg result)
|
||||
(leave (_ "~A: unrecognized option~%") name))
|
||||
(lambda (arg result)
|
||||
|
|
|
@ -289,3 +289,16 @@ GUIX_PACKAGE_PATH="$module_dir"
|
|||
export GUIX_PACKAGE_PATH
|
||||
guix package -A emacs-foo-bar | grep 42
|
||||
guix package -i emacs-foo-bar-42 -n
|
||||
unset GUIX_PACKAGE_PATH
|
||||
|
||||
# Using 'GUIX_BUILD_OPTIONS'.
|
||||
|
||||
available="`guix package -A | sort`"
|
||||
GUIX_BUILD_OPTIONS="--dry-run"
|
||||
export GUIX_BUILD_OPTIONS
|
||||
|
||||
# Make sure $GUIX_BUILD_OPTIONS is not simply appended to the command-line,
|
||||
# which would break 'guix package -A' and similar.
|
||||
available2="`guix package -A | sort`"
|
||||
test "$available2" = "$available"
|
||||
guix package -I
|
||||
|
|
Loading…
Reference in New Issue