summaryrefslogtreecommitdiff
path: root/guix/derivations.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-12-09 10:30:03 +0100
committerLudovic Courtès <ludo@gnu.org>2015-12-09 14:29:41 +0100
commit58c08df0544bc39b3b5a8f6638f776159b6b8d8e (patch)
tree5f172e8bd62b708822babe11944585616c0e06be /guix/derivations.scm
parentcc9553562c0b719c40083503795845aa0cc3a6f8 (diff)
downloadgnu-guix-58c08df0544bc39b3b5a8f6638f776159b6b8d8e.tar
gnu-guix-58c08df0544bc39b3b5a8f6638f776159b6b8d8e.tar.gz
derivations: Determine what's built in 'check' mode.
* guix/derivations.scm (substitution-oracle): Add #:mode parameter and honor it. (derivation-prerequisites-to-build): Likewise. [derivation-built?]: Take it into account. * guix/ui.scm (show-what-to-build): Add #:mode parameter. Pass it to 'substitute-oracle' and 'derivations-prerequisites-to-build'. * tests/derivations.scm ("derivation-prerequisites-to-build in 'check' mode"): New test.
Diffstat (limited to 'guix/derivations.scm')
-rw-r--r--guix/derivations.scm23
1 files changed, 16 insertions, 7 deletions
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 342a6c83f3..8a0fecaaee 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -239,7 +239,8 @@ result is the set of prerequisites of DRV not already in valid."
(derivation-output-path (assoc-ref outputs sub-drv)))
sub-drvs))))
-(define* (substitution-oracle store drv)
+(define* (substitution-oracle store drv
+ #:key (mode (build-mode normal)))
"Return a one-argument procedure that, when passed a store file name,
returns #t if it's substitutable and #f otherwise. The returned procedure
knows about all substitutes for all the derivations listed in DRV, *except*
@@ -271,9 +272,12 @@ substituter many times."
(let ((self (match (derivation->output-paths drv)
(((names . paths) ...)
paths))))
- (if (every valid? self)
- result
- (cons* self (dependencies drv) result))))
+ (cond ((eqv? mode (build-mode check))
+ (cons (dependencies drv) result))
+ ((every valid? self)
+ result)
+ (else
+ (cons* self (dependencies drv) result)))))
'()
drv))))
(subst (list->set (substitutable-paths store paths))))
@@ -281,11 +285,13 @@ substituter many times."
(define* (derivation-prerequisites-to-build store drv
#:key
+ (mode (build-mode normal))
(outputs
(derivation-output-names drv))
(substitutable?
(substitution-oracle store
- (list drv))))
+ (list drv)
+ #:mode mode)))
"Return two values: the list of derivation-inputs required to build the
OUTPUTS of DRV and not already available in STORE, recursively, and the list
of required store paths that can be substituted. SUBSTITUTABLE? must be a
@@ -301,8 +307,11 @@ one-argument procedure similar to that returned by 'substitution-oracle'."
;; least one is missing, then everything must be rebuilt.
(compose (cut every substitutable? <>) derivation-input-output-paths))
- (define (derivation-built? drv sub-drvs)
- (every built? (derivation-output-paths drv sub-drvs)))
+ (define (derivation-built? drv* sub-drvs)
+ ;; In 'check' mode, assume that DRV is not built.
+ (and (not (and (eqv? mode (build-mode check))
+ (eq? drv* drv)))
+ (every built? (derivation-output-paths drv* sub-drvs))))
(define (derivation-substitutable? drv sub-drvs)
(and (substitutable-derivation? drv)