summaryrefslogtreecommitdiff
path: root/guix/scripts/system.scm
diff options
context:
space:
mode:
authorMathieu Othacehe <m.othacehe@gmail.com>2017-12-12 16:06:47 +0100
committerMathieu Othacehe <m.othacehe@gmail.com>2017-12-15 12:15:15 +0100
commit5a72ddf176d53a7f4df922985d9d7fd4cfa160f5 (patch)
treedf7a61a6eb598dde8a0a71fff9aa0e858dd08b7f /guix/scripts/system.scm
parentd65854bdda4ad5464fcd8fe6289eedc13ea82ba1 (diff)
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.
Diffstat (limited to 'guix/scripts/system.scm')
-rw-r--r--guix/scripts/system.scm28
1 files changed, 22 insertions, 6 deletions
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index cbf7e6cd03..36aed3331f 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -858,6 +858,9 @@ Some ACTIONS support additional ARGS.\n"))
(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"))
(display (G_ "
@@ -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)