@@ 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