derivations: Distinguish direct store paths from files within a store path.
* guix/derivations.scm (derivation)[direct-store-path?]: New procedure. Use it to determine which inputs must be added to the store.
This commit is contained in:
parent
3259877d35
commit
200dc93761
@ -364,6 +364,15 @@ the derivation called NAME with hash HASH."
|
||||
store path and <derivation> object. When HASH, HASH-ALGO, and HASH-MODE
|
||||
are given, a fixed-output derivation is created---i.e., one whose result is
|
||||
known in advance, such as a file download."
|
||||
(define direct-store-path?
|
||||
(let ((len (+ 1 (string-length (%store-prefix)))))
|
||||
(lambda (p)
|
||||
;; Return #t if P is a store path, and not a sub-directory of a
|
||||
;; store path. This predicate is needed because files *under* a
|
||||
;; store path are not valid inputs.
|
||||
(and (store-path? p)
|
||||
(not (string-index (substring p len) #\/))))))
|
||||
|
||||
(define (add-output-paths drv)
|
||||
;; Return DRV with an actual store path for each of its output and the
|
||||
;; corresponding environment variable.
|
||||
@ -411,9 +420,9 @@ known in advance, such as a file download."
|
||||
(make-derivation-output "" hash-algo hash)))
|
||||
outputs))
|
||||
(inputs (map (match-lambda
|
||||
(((? store-path? input))
|
||||
(((? direct-store-path? input))
|
||||
(make-derivation-input input '("out")))
|
||||
(((? store-path? input) sub-drvs ...)
|
||||
(((? direct-store-path? input) sub-drvs ...)
|
||||
(make-derivation-input input sub-drvs))
|
||||
((input . _)
|
||||
(let ((path (add-to-store store
|
||||
|
Loading…
Reference in New Issue
Block a user