scripts: system: Add --expression option.
* guix/scripts/system.scm (show-help): Add expression option. (%options): Ditto. (guix-system): Allow commands taking a file as an argument to use an expression instead. (process-action): Read operating-system from expression or file. * doc/guix.texi (Invoking guix system): Introduce the expression option.
This commit is contained in:
parent
d65854bdda
commit
5a72ddf176
|
@ -18744,6 +18744,14 @@ Build Options}). In addition, @var{options} can contain one of the
|
|||
following:
|
||||
|
||||
@table @option
|
||||
@item --expression=@var{expr}
|
||||
@itemx -e @var{expr}
|
||||
Consider the operating-system @var{expr} evaluates to.
|
||||
This is an alternative to specifying a file which evaluates to an
|
||||
operating system.
|
||||
This is used to generate the GuixSD installer @pxref{Building the
|
||||
Installation Image}).
|
||||
|
||||
@item --system=@var{system}
|
||||
@itemx -s @var{system}
|
||||
Attempt to build for @var{system} instead of the host system type.
|
||||
|
|
|
@ -857,6 +857,9 @@ Some ACTIONS support additional ARGS.\n"))
|
|||
(show-build-options-help)
|
||||
(display (G_ "
|
||||
-d, --derivation return the derivation of the given system"))
|
||||
(display (G_ "
|
||||
-e, --expression=EXPR consider the operating-system EXPR evaluates to
|
||||
instead of reading FILE, when applicable"))
|
||||
(display (G_ "
|
||||
--on-error=STRATEGY
|
||||
apply STRATEGY when an error occurs while reading FILE"))
|
||||
|
@ -895,6 +898,9 @@ Some ACTIONS support additional ARGS.\n"))
|
|||
(option '(#\V "version") #f #f
|
||||
(lambda args
|
||||
(show-version-and-exit "guix system")))
|
||||
(option '(#\e "expression") #t #f
|
||||
(lambda (opt name arg result)
|
||||
(alist-cons 'expression arg result)))
|
||||
(option '(#\d "derivation") #f #f
|
||||
(lambda (opt name arg result)
|
||||
(alist-cons 'derivations-only? #t result)))
|
||||
|
@ -964,11 +970,19 @@ resulting from command-line parsing."
|
|||
(let* ((file (match args
|
||||
(() #f)
|
||||
((x . _) x)))
|
||||
(expr (assoc-ref opts 'expression))
|
||||
(system (assoc-ref opts 'system))
|
||||
(os (if file
|
||||
(load* file %user-module
|
||||
#:on-error (assoc-ref opts 'on-error))
|
||||
(leave (G_ "no configuration file specified~%"))))
|
||||
(os (cond
|
||||
((and expr file)
|
||||
(leave
|
||||
(G_ "both file and expression cannot be specified~%")))
|
||||
(expr
|
||||
(read/eval expr))
|
||||
(file
|
||||
(load* file %user-module
|
||||
#:on-error (assoc-ref opts 'on-error)))
|
||||
(else
|
||||
(leave (G_ "no configuration specified~%")))))
|
||||
|
||||
(dry? (assoc-ref opts 'dry-run?))
|
||||
(bootloader? (assoc-ref opts 'install-bootloader?))
|
||||
|
@ -1079,7 +1093,8 @@ argument list and OPTS is the option alist."
|
|||
;; Extract the plain arguments from OPTS.
|
||||
(let* ((args (reverse (filter-map (match-pair 'argument) opts)))
|
||||
(count (length args))
|
||||
(action (assoc-ref opts 'action)))
|
||||
(action (assoc-ref opts 'action))
|
||||
(expr (assoc-ref opts 'expression)))
|
||||
(define (fail)
|
||||
(leave (G_ "wrong number of arguments for action '~a'~%")
|
||||
action))
|
||||
|
@ -1093,7 +1108,8 @@ argument list and OPTS is the option alist."
|
|||
|
||||
(case action
|
||||
((build container vm vm-image disk-image reconfigure)
|
||||
(unless (= count 1)
|
||||
(unless (or (= count 1)
|
||||
(and expr (= count 0)))
|
||||
(fail)))
|
||||
((init)
|
||||
(unless (= count 2)
|
||||
|
|
Loading…
Reference in New Issue