aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-05-19 23:08:43 +0200
committerLudovic Courtès <ludo@gnu.org>2014-05-19 23:52:40 +0200
commit52ddf2ae6fb369ec64aae75fc311d6cc57a713b6 (patch)
tree7b7f02838ff6367b4819f6238a85f4fc98e7461e
parent79b0d4e1049afe1ceb5d420a9ceb11c230a1da24 (diff)
downloadguix-52ddf2ae6fb369ec64aae75fc311d6cc57a713b6.tar
guix-52ddf2ae6fb369ec64aae75fc311d6cc57a713b6.tar.gz
ui: Gracefully deal with zero-output derivations.
* guix/ui.scm (show-what-to-build)[built-or-substitutable?]: New procedure. Check whether OUT is #f. Use it. * tests/ui.scm ("show-what-to-build, zero outputs"): New test.
-rw-r--r--guix/ui.scm17
-rw-r--r--tests/ui.scm12
2 files changed, 21 insertions, 8 deletions
diff --git a/guix/ui.scm b/guix/ui.scm
index 259dddd481..48b5c745c6 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -261,6 +261,14 @@ error."
derivations listed in DRV. Return #t if there's something to build, #f
otherwise. When USE-SUBSTITUTES?, check and report what is prerequisites are
available for download."
+ (define (built-or-substitutable? drv)
+ (let ((out (derivation->output-path drv)))
+ ;; If DRV has zero outputs, OUT is #f.
+ (or (not out)
+ (or (valid-path? store out)
+ (and use-substitutes?
+ (has-substitutes? store out))))))
+
(let*-values (((build download)
(fold2 (lambda (drv build download)
(let-values (((b d)
@@ -275,14 +283,7 @@ available for download."
((build) ; add the DRV themselves
(delete-duplicates
(append (map derivation-file-name
- (remove (lambda (drv)
- (let ((out (derivation->output-path
- drv)))
- (or (valid-path? store out)
- (and use-substitutes?
- (has-substitutes? store
- out)))))
- drv))
+ (remove built-or-substitutable? drv))
(map derivation-input-path build))))
((download) ; add the references of DOWNLOAD
(if use-substitutes?
diff --git a/tests/ui.scm b/tests/ui.scm
index 886223ef54..4bf7a779c5 100644
--- a/tests/ui.scm
+++ b/tests/ui.scm
@@ -19,6 +19,8 @@
(define-module (test-ui)
#:use-module (guix ui)
+ #:use-module (guix store)
+ #:use-module (guix derivations)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-19)
#:use-module (srfi srfi-64))
@@ -189,6 +191,16 @@ interface, and powerful string processing.")
(lambda args
#t)))
+(test-equal "show-what-to-build, zero outputs"
+ ""
+ (with-store store
+ (let ((drv (derivation store "zero" "/bin/sh" '()
+ #:outputs '())))
+ (with-error-to-string
+ (lambda ()
+ ;; This should print nothing.
+ (show-what-to-build store (list drv)))))))
+
(test-end "ui")