diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-05-15 22:36:46 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-05-16 13:24:06 +0200 |
commit | ce10e6053bb02e936b3a0862f3a3f86010b948d0 (patch) | |
tree | a14e2532ae8d209963d3d179df6fc8dd57d1a4be /guix/scripts | |
parent | 6e633a510c53ac3130296bfd5ecf98506b499421 (diff) |
guix system: Type-check the file or expression.
Previously, users would get a wrong-type-arg exception down the road
with an intimidating backtrace.
* guix/scripts/system.scm (process-action)[ensure-operating-system]: New
procedure.
Use it.
Diffstat (limited to 'guix/scripts')
-rw-r--r-- | guix/scripts/system.scm | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm index 8434d1ecaa..60c1ca5c9a 100644 --- a/guix/scripts/system.scm +++ b/guix/scripts/system.scm @@ -1143,22 +1143,30 @@ Some ACTIONS support additional ARGS.\n")) ACTION must be one of the sub-commands that takes an operating system declaration as an argument (a file name.) OPTS is the raw alist of options resulting from command-line parsing." + (define (ensure-operating-system file-or-exp obj) + (unless (operating-system? obj) + (leave (G_ "'~a' does not return an operating system~%") + file-or-exp)) + obj) + (let* ((file (match args (() #f) ((x . _) x))) (expr (assoc-ref opts 'expression)) (system (assoc-ref opts 'system)) - (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~%"))))) + (os (ensure-operating-system + (or file expr) + (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?)) |