diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-01-24 22:50:40 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-01-24 22:57:49 +0100 |
commit | f304c9c237aca7e9007d6e0cefd6ed858c5a9e47 (patch) | |
tree | ba6720f7db2bd14590d2aa89fa28245ff7ee40a0 /guix/ui.scm | |
parent | da74bc7886cba77192260d84b2dd57466e4b5354 (diff) | |
download | gnu-guix-f304c9c237aca7e9007d6e0cefd6ed858c5a9e47.tar gnu-guix-f304c9c237aca7e9007d6e0cefd6ed858c5a9e47.tar.gz |
derivations: Raise an error for references to non-existent outputs.
Fixes <http://bugs.gnu.org/19630>.
Reported by Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>.
* guix/derivations.scm (&derivation-error,
&derivation-missing-output-error): New error conditions.
(derivation->output-path): Raise a '&derivation-missing-output-error'
if OUTPUT is not an output of DRV.
* guix/ui.scm (call-with-error-handling): Add case for
'derivation-missing-output-error?'.
(show-what-to-build): Check whether (derivation-outputs drv) is
empty.
* tests/packages.scm ("reference to non-existent output"): Add test.
Diffstat (limited to 'guix/ui.scm')
-rw-r--r-- | guix/ui.scm | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/guix/ui.scm b/guix/ui.scm index e1e75d8556..04c50f4827 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -249,6 +249,10 @@ interpreted." ;; FIXME: Server-provided error messages aren't i18n'd. (leave (_ "build failed: ~a~%") (nix-protocol-error-message c))) + ((derivation-missing-output-error? c) + (leave (_ "reference to invalid output '~a' of derivation '~a'~%") + (derivation-missing-output c) + (derivation-file-name (derivation-error-derivation c)))) ((message-condition? c) ;; Normally '&message' error conditions have an i18n'd message. (leave (_ "~a~%") @@ -309,9 +313,8 @@ available for download." (const #f))) (define (built-or-substitutable? drv) - (let ((out (derivation->output-path drv))) - ;; If DRV has zero outputs, OUT is #f. - (or (not out) + (or (null? (derivation-outputs drv)) + (let ((out (derivation->output-path drv))) ;XXX: assume "out" exists (or (valid-path? store out) (substitutable? out))))) |