ui: Gracefully report "command not found" errors.
* guix/ui.scm (run-guix-command): Can `resolve-interface' errors and report them with `leave'. Parameterize `program-name' from here. (guix-main): Remove parameterization of `program-name'.
This commit is contained in:
		
							parent
							
								
									a4007c9852
								
							
						
					
					
						commit
						ec5d0a85eb
					
				
					 1 changed files with 18 additions and 11 deletions
				
			
		
							
								
								
									
										29
									
								
								guix/ui.scm
									
										
									
									
									
								
							
							
						
						
									
										29
									
								
								guix/ui.scm
									
										
									
									
									
								
							| 
						 | 
					@ -389,17 +389,25 @@ reporting."
 | 
				
			||||||
  (format (current-error-port)
 | 
					  (format (current-error-port)
 | 
				
			||||||
          (_ "Usage: guix COMMAND ARGS...~%")))
 | 
					          (_ "Usage: guix COMMAND ARGS...~%")))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (run-guix-command command . args)
 | 
					 | 
				
			||||||
  ;; TODO: Gracefully report errors
 | 
					 | 
				
			||||||
  (let* ((module (resolve-interface `(guix scripts ,command)))
 | 
					 | 
				
			||||||
         (command-main (module-ref module
 | 
					 | 
				
			||||||
                                   (symbol-append 'guix- command))))
 | 
					 | 
				
			||||||
    (apply command-main args)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(define program-name
 | 
					(define program-name
 | 
				
			||||||
  ;; Name of the command-line program currently executing, or #f.
 | 
					  ;; Name of the command-line program currently executing, or #f.
 | 
				
			||||||
  (make-parameter #f))
 | 
					  (make-parameter #f))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (run-guix-command command . args)
 | 
				
			||||||
 | 
					  "Run COMMAND with the given ARGS.  Report an error when COMMAND is not
 | 
				
			||||||
 | 
					found."
 | 
				
			||||||
 | 
					  (define module
 | 
				
			||||||
 | 
					    (catch 'misc-error
 | 
				
			||||||
 | 
					      (lambda ()
 | 
				
			||||||
 | 
					        (resolve-interface `(guix scripts ,command)))
 | 
				
			||||||
 | 
					      (lambda -
 | 
				
			||||||
 | 
					        (leave (_ "~a: command not found~%") command))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  (let ((command-main (module-ref module
 | 
				
			||||||
 | 
					                                  (symbol-append 'guix- command))))
 | 
				
			||||||
 | 
					    (parameterize ((program-name command))
 | 
				
			||||||
 | 
					      (apply command-main args))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define guix-warning-port
 | 
					(define guix-warning-port
 | 
				
			||||||
  (make-parameter (current-warning-port)))
 | 
					  (make-parameter (current-warning-port)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -413,9 +421,8 @@ reporting."
 | 
				
			||||||
      (("--version") (show-version-and-exit "guix"))
 | 
					      (("--version") (show-version-and-exit "guix"))
 | 
				
			||||||
      (((? option?) args ...) (show-guix-usage) (exit 1))
 | 
					      (((? option?) args ...) (show-guix-usage) (exit 1))
 | 
				
			||||||
      ((command args ...)
 | 
					      ((command args ...)
 | 
				
			||||||
       (parameterize ((program-name command))
 | 
					       (apply run-guix-command
 | 
				
			||||||
         (apply run-guix-command
 | 
					              (string->symbol command)
 | 
				
			||||||
                (string->symbol command)
 | 
					              args)))))
 | 
				
			||||||
                args))))))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
;;; ui.scm ends here
 | 
					;;; ui.scm ends here
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue