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
					
				
					 2 changed files with 30 additions and 6 deletions
				
			
		|  | @ -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) | ||||
|  |  | |||
		Reference in a new issue