diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-07-02 00:37:49 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-07-02 00:41:12 +0200 |
commit | b2fde4800d39863d9260509ac0b174b459d42840 (patch) | |
tree | d91b70dab106a024b0150d3ef918bb3fdaa2ef95 | |
parent | 2633bd324b4333168518511030f227ee9664e65f (diff) |
store: 'references/substitutes' really caches its result.
Until now the cache was always empty because 'for-each' was passed ITEMS
as its second argument, and ITEMS was the empty list at that point.
* guix/store.scm (references/substitutes): Add 'requested' variable.
Use it as second argument of 'for-each' in base case.
-rw-r--r-- | guix/store.scm | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/guix/store.scm b/guix/store.scm index afd26d3fec..a207d478e6 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -1009,7 +1009,8 @@ error if there is no such root." length as ITEMS. Query substitute information for any item missing from the store at once. Raise a '&nix-protocol-error' exception if reference information for one of ITEMS is missing." - (let* ((local-refs (map (lambda (item) + (let* ((requested items) + (local-refs (map (lambda (item) (or (hash-ref %reference-cache item) (guard (c ((nix-protocol-error? c) #f)) (references store item)))) @@ -1040,7 +1041,7 @@ the list of references") (() (let ((result (reverse result))) (for-each (cut hash-set! %reference-cache <> <>) - items result) + requested result) result)) ((item items ...) (match local-refs |