derivations: 'substitution-oracle' now ignores sub-trees that are valid.
Before that, "guix build qt", when only qt itself is missing, would lead 'substitution-oracle' to call 'substitutable-paths' with 318 items. Now, this is down to 6 items, because it doesn't ask about prerequisites that are already valid. * guix/derivations.scm (substitution-oracle)[valid-input?, dependencies]: New procedures. Use 'dependencies' and remove call to 'remove'.master
parent
3681db5d2c
commit
c3a450fb49
|
@ -249,6 +249,17 @@ substituter many times."
|
||||||
(define valid?
|
(define valid?
|
||||||
(cut valid-path? store <>))
|
(cut valid-path? store <>))
|
||||||
|
|
||||||
|
(define valid-input?
|
||||||
|
(cut valid-derivation-input? store <>))
|
||||||
|
|
||||||
|
(define (dependencies drv)
|
||||||
|
;; Skip prerequisite sub-trees of DRV whose root is valid. This allows us
|
||||||
|
;; to ask the substituter for just as much as needed, instead of asking it
|
||||||
|
;; for the whole world, which can be significantly faster when substitute
|
||||||
|
;; info is not already in cache.
|
||||||
|
(append-map derivation-input-output-paths
|
||||||
|
(derivation-prerequisites drv valid-input?)))
|
||||||
|
|
||||||
(let* ((paths (delete-duplicates
|
(let* ((paths (delete-duplicates
|
||||||
(fold (lambda (drv result)
|
(fold (lambda (drv result)
|
||||||
(let ((self (match (derivation->output-paths drv)
|
(let ((self (match (derivation->output-paths drv)
|
||||||
|
@ -256,11 +267,8 @@ substituter many times."
|
||||||
paths))))
|
paths))))
|
||||||
(if (every valid? self)
|
(if (every valid? self)
|
||||||
result
|
result
|
||||||
(let ((deps
|
(append (append self (dependencies drv))
|
||||||
(append-map derivation-input-output-paths
|
result))))
|
||||||
(derivation-prerequisites drv))))
|
|
||||||
(append (remove valid? (append self deps))
|
|
||||||
result)))))
|
|
||||||
'()
|
'()
|
||||||
drv)))
|
drv)))
|
||||||
(subst (list->set (substitutable-paths store paths))))
|
(subst (list->set (substitutable-paths store paths))))
|
||||||
|
|
Reference in New Issue