~ruther/guix-local

b2fde4800d39863d9260509ac0b174b459d42840 — Ludovic Courtès 8 years ago 2633bd3
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.
1 files changed, 3 insertions(+), 2 deletions(-)

M guix/store.scm
M guix/store.scm => guix/store.scm +3 -2
@@ 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