From ae3b6bb0f4dc1f69ecb629c9b7ad34588d646039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 4 Jun 2013 09:43:38 +0200 Subject: [PATCH] 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. --- guix/scripts/substitute-binary.scm | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/guix/scripts/substitute-binary.scm b/guix/scripts/substitute-binary.scm index 088a41a15c..13c382877b 100755 --- a/guix/scripts/substitute-binary.scm +++ b/guix/scripts/substitute-binary.scm @@ -236,8 +236,8 @@ (define (string->narinfo str) (define (fetch-narinfo cache path) "Return the 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 @@ (define (cache-entry narinfo) (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 @@ (define (guix-substitute-binary . args) (("--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