diff options
author | Mathieu Othacehe <m.othacehe@gmail.com> | 2017-12-12 16:06:47 +0100 |
---|---|---|
committer | Mathieu Othacehe <m.othacehe@gmail.com> | 2017-12-15 12:15:15 +0100 |
commit | 5a72ddf176d53a7f4df922985d9d7fd4cfa160f5 (patch) | |
tree | df7a61a6eb598dde8a0a71fff9aa0e858dd08b7f /guix/scripts/system.scm | |
parent | d65854bdda4ad5464fcd8fe6289eedc13ea82ba1 (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.scm | 28 |
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) |