substitute-binary: Don't cache .narinfo lookups when lacking networking.

* guix/scripts/substitute-binary.scm (lookup-narinfo): Don't cache
  NARINFO when CACHE is #f.
This commit is contained in:
Ludovic Courtès 2013-06-04 09:43:38 +02:00
parent bdbb6fbb19
commit ae3b6bb0f4
1 changed files with 16 additions and 7 deletions

View File

@ -236,8 +236,8 @@ reading PORT."
(define (fetch-narinfo cache path)
"Return the <narinfo> record for PATH, or #f if CACHE does not hold PATH."
(define (download url)
;; Download the `nix-cache-info' from URL, and return its contents as an
;; list of key/value pairs.
;; Download the .narinfo from URL, and return its contents as a list of
;; key/value pairs.
(false-if-exception (fetch (string->uri url))))
(and (string=? (cache-store-directory cache) (%store-prefix))
@ -288,11 +288,15 @@ check what it has."
(values #f #f)))))
(if valid?
cached ; including negative caches
(let ((narinfo (and=> (force cache)
(cut fetch-narinfo <> path))))
(with-atomic-file-output cache-file
(lambda (out)
(write (cache-entry narinfo) out)))
(let* ((cache (force cache))
(narinfo (and cache (fetch-narinfo cache path))))
;; Cache NARINFO only when CACHE was actually accessible. This
;; avoids caching negative hits when in fact we just lacked network
;; access.
(when cache
(with-atomic-file-output cache-file
(lambda (out)
(write (cache-entry narinfo) out))))
narinfo))))
(define (remove-expired-cached-narinfos)
@ -457,4 +461,9 @@ indefinitely."
(("--version")
(show-version-and-exit "guix substitute-binary")))))
;;; Local Variable:
;;; eval: (put 'with-atomic-file-output 'scheme-indent-function 1)
;;; End:
;;; substitute-binary.scm ends here