diff options
author | Ludovic Courtès <ludo@gnu.org> | 2013-02-01 09:17:35 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2013-02-01 09:17:59 +0100 |
commit | aa92cf980cab9f085df11c79c4b27d2b8b0d88aa (patch) | |
tree | c300c62dda2a7c4099268ea9d0a1bb1bb4bbdcb0 | |
parent | 0f5378ebc4096b1d536f75c9867454215e8e06d6 (diff) | |
download | guix-aa92cf980cab9f085df11c79c4b27d2b8b0d88aa.tar guix-aa92cf980cab9f085df11c79c4b27d2b8b0d88aa.tar.gz |
guix-package: Gracefully report non-existing outputs.
* guix-package.in (guix-package)[find-package](ensure-output): New
procedure. Use it to validate SUB-DRV.
-rw-r--r-- | guix-package.in | 12 | ||||
-rw-r--r-- | 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 |