From aa92cf980cab9f085df11c79c4b27d2b8b0d88aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 1 Feb 2013 09:17:35 +0100 Subject: [PATCH] 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 ++++++++++-- tests/guix-package.sh | 10 +++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) 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))))) diff --git a/tests/guix-package.sh b/tests/guix-package.sh index 157f863719..0b31b55103 100644 --- a/tests/guix-package.sh +++ b/tests/guix-package.sh @@ -120,6 +120,13 @@ fi # Make sure the `:' syntax works. guix-package --bootstrap -i "binutils:lib" -p "$profile" -n +# Make sure nonexistent outputs are reported. +guix-package --bootstrap -i "guile-bootstrap:out" -p "$profile" -n +if guix-package --bootstrap -i "guile-bootstrap:does-not-exist" -p "$profile" -n; +then false; else true; fi +if guix-package --bootstrap -i "guile-bootstrap:does-not-exist" -p "$profile"; +then false; else true; fi + # Check whether `--list-available' returns something sensible. guix-package -A 'gui.*e' | grep guile @@ -161,4 +168,5 @@ do done # Extraneous argument. -! guix-package install foo-bar +if guix-package install foo-bar; +then false; else true; fi