diff options
author | Ludovic Courtès <ludo@gnu.org> | 2016-06-22 23:46:32 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2016-06-22 23:46:32 +0200 |
commit | f10dcbf1a92c147a2fedba6f774afa6a7013fcdf (patch) | |
tree | e253eba0bbac2ec254d51034eda26fa70d65a872 /guix/scripts | |
parent | 3583b27b2cb42ac8c88e7f53df2e3101d5a82ede (diff) | |
download | gnu-guix-f10dcbf1a92c147a2fedba6f774afa6a7013fcdf.tar gnu-guix-f10dcbf1a92c147a2fedba6f774afa6a7013fcdf.tar.gz |
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'.
Diffstat (limited to 'guix/scripts')
-rwxr-xr-x | guix/scripts/substitute.scm | 28 |
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) |