aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-06-22 23:46:32 +0200
committerLudovic Courtès <ludo@gnu.org>2016-06-22 23:46:32 +0200
commitf10dcbf1a92c147a2fedba6f774afa6a7013fcdf (patch)
treee253eba0bbac2ec254d51034eda26fa70d65a872
parent3583b27b2cb42ac8c88e7f53df2e3101d5a82ede (diff)
downloadguix-f10dcbf1a92c147a2fedba6f774afa6a7013fcdf.tar.gz
guix-f10dcbf1a92c147a2fedba6f774afa6a7013fcdf.zip
substitute: Use ~/.cache when invoked by an unprivileged user.
This is a followup to ea0c6e0507a6997f12a4f29d0445b51cf53bd81e. * guix/scripts/substitute.scm (%narinfo-cache-directory): Use 'cache-directory' when (getuid) returns non-zero. (cache-narinfo!): Remove 'catch'.
-rwxr-xr-xguix/scripts/substitute.scm28
1 files changed, 13 insertions, 15 deletions
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 81ce770dc5..5722aa821d 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -94,10 +94,15 @@
;;; Code:
(define %narinfo-cache-directory
- ;; A local cache of narinfos, to avoid going to the network.
- (or (and=> (getenv "XDG_CACHE_HOME")
- (cut string-append <> "/guix/substitute"))
- (string-append %state-directory "/substitute/cache")))
+ ;; A local cache of narinfos, to avoid going to the network. Most of the
+ ;; time, 'guix substitute' is called by guix-daemon as root and stores its
+ ;; cached data in /var/guix/…. However, when invoked from 'guix challenge'
+ ;; as a user, it stores its cache in ~/.cache.
+ (if (zero? (getuid))
+ (or (and=> (getenv "XDG_CACHE_HOME")
+ (cut string-append <> "/guix/substitute"))
+ (string-append %state-directory "/substitute/cache"))
+ (string-append (cache-directory) "/substitute")))
(define %allow-unauthenticated-substitutes?
;; Whether to allow unchecked substitutes. This is useful for testing
@@ -501,17 +506,10 @@ indicates that PATH is unavailable at CACHE-URL."
(value ,(and=> narinfo narinfo->string))))
(let ((file (narinfo-cache-file cache-url path)))
- (catch 'system-error
- (lambda ()
- (mkdir-p (dirname file))
- (with-atomic-file-output file
- (lambda (out)
- (write (cache-entry cache-url narinfo) out))))
- (lambda args
- ;; We may not have write access to the local cache when called from an
- ;; unprivileged process such as 'guix challenge'.
- (unless (= EACCES (system-error-errno args))
- (apply throw args)))))
+ (mkdir-p (dirname file))
+ (with-atomic-file-output file
+ (lambda (out)
+ (write (cache-entry cache-url narinfo) out))))
narinfo)