From aa92cf980cab9f085df11c79c4b27d2b8b0d88aa Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 1 Feb 2013 09:17:35 +0100 Subject: guix-package: Gracefully report non-existing outputs. * guix-package.in (guix-package)[find-package](ensure-output): New procedure. Use it to validate SUB-DRV. --- guix-package.in | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'guix-package.in') diff --git a/guix-package.in b/guix-package.in index 053f8fbf83..58164c6e46 100644 --- a/guix-package.in +++ b/guix-package.in @@ -402,6 +402,14 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) ;; sub-derivation name. (define request name) + (define (ensure-output p sub-drv) + (if (member sub-drv (package-outputs p)) + p + (leave (_ "~a: error: package `~a' lacks output `~a'~%") + (location->string (package-location p)) + (package-full-name p) + sub-drv))) + (let*-values (((name sub-drv) (match (string-rindex name #\:) (#f (values name "out")) @@ -411,7 +419,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) (package-name->name+version name))) (match (find-packages-by-name name version) ((p) - (list name (package-version p) sub-drv p)) + (list name (package-version p) sub-drv (ensure-output p sub-drv))) ((p p* ...) (format (current-error-port) (_ "warning: ambiguous package specification `~a'~%") @@ -420,7 +428,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) (_ "warning: choosing ~a from ~a~%") (package-full-name p) (location->string (package-location p))) - (list name (package-version p) sub-drv p)) + (list name (package-version p) sub-drv (ensure-output p sub-drv))) (() (leave (_ "~a: package not found~%") request))))) -- cgit 1.4.1