diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-07-02 16:45:12 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-07-02 18:33:51 +0200 |
commit | 9616b81e9861c831159a0e1a5993854b9ad3c3e5 (patch) | |
tree | 96876145d95558610b67e3b34d1cda4b86106274 | |
parent | 7c9fbf3e3dde341b33cfa8dca10001150e54640e (diff) | |
download | guix-9616b81e9861c831159a0e1a5993854b9ad3c3e5.tar guix-9616b81e9861c831159a0e1a5993854b9ad3c3e5.tar.gz |
grafts: 'references-oracle' now takes a derivation input.
That way, if we end up calling 'build-derivations', we'll only build the
outputs that we really need.
* guix/grafts.scm (references-oracle): Rename 'drv' to 'input'.
[output-paths]: Remove.
Adjust accordingly.
(graft-derivation): Adjust call to 'references-oracle'.
-rw-r--r-- | guix/grafts.scm | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/guix/grafts.scm b/guix/grafts.scm index 3b43e11425..adc7bfafae 100644 --- a/guix/grafts.scm +++ b/guix/grafts.scm @@ -163,16 +163,11 @@ references. Call REFERENCES to get the list of references." items)))) (remove (cut member <> self) refs))) -(define (references-oracle store drv) - "Return a one-argument procedure that, when passed the file name of DRV's -outputs or their dependencies, returns the list of references of that item. -Use either local info or substitute info; build DRV if no information is -available." - (define (output-paths drv) - (match (derivation->output-paths drv) - (((names . items) ...) - items))) - +(define (references-oracle store input) + "Return a one-argument procedure that, when passed the output file names of +INPUT, a derivation input, or their dependencies, returns the list of +references of that item. Use either local info or substitute info; build +INPUT if no information is available." (define (references* items) (guard (c ((store-protocol-error? c) ;; As a last resort, build DRV and query the references of the @@ -181,13 +176,14 @@ available." ;; Warm up the narinfo cache, otherwise each derivation build ;; will result in one HTTP request to get one narinfo, which is ;; much less efficient than fetching them all upfront. - (substitution-oracle store (list drv)) + (substitution-oracle store + (list (derivation-input-derivation input))) - (and (build-derivations store (list drv)) + (and (build-derivations store (list input)) (map (cut references store <>) items)))) (references/substitutes store items))) - (let loop ((items (output-paths drv)) + (let loop ((items (derivation-input-output-paths input)) (result vlist-null)) (match items (() @@ -324,7 +320,7 @@ DRV, and graft DRV itself to refer to those grafted dependencies." ;; upfront to have as much parallelism as possible when querying substitute ;; info or when building DRV. (define references - (references-oracle store drv)) + (references-oracle store (derivation-input drv outputs))) (match (run-with-state (cumulative-grafts store drv grafts references |