summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-11-30 11:19:30 +0100
committerLudovic Courtès <ludo@gnu.org>2021-12-01 17:51:33 +0100
commit9f371f23ebfa20f70b3bfd55dc459b683f21ba91 (patch)
treebf8fc6ffe4693db59f1932c72a2ca5f728c0b214
parent1a0696e0a6dcde342094712957037c586f572efb (diff)
downloadguix-9f371f23ebfa20f70b3bfd55dc459b683f21ba91.tar.gz
inferior: 'cached-channel-instance' does not cache unauthenticated instances.
The comment saying that caching is fine even when AUTHENTICATE? is false
was true in commit 838ac881ec98cb71d4a4e4b20773573f99ecbf25, but it
became incorrect in 7cfd789150f448cf5256b88915bae4163cc9db03, which
no longer calls 'latest-channel-instances' on cache hits.

* guix/inferior.scm (cached-channel-instance): Do not create CACHED when
AUTHENTICATE? is false.
-rw-r--r--guix/inferior.scm17
1 files changed, 12 insertions, 5 deletions
diff --git a/guix/inferior.scm b/guix/inferior.scm
index 81958baaa5..febac29766 100644
--- a/guix/inferior.scm
+++ b/guix/inferior.scm
@@ -785,6 +785,9 @@ determines whether CHANNELS are authenticated."
   (define add-indirect-root*
     (store-lift add-indirect-root))
 
+  (define add-temp-root*
+    (store-lift add-temp-root))
+
   (mkdir-p cache-directory)
   (maybe-remove-expired-cache-entries cache-directory
                                       cache-entries
@@ -805,11 +808,15 @@ determines whether CHANNELS are authenticated."
             ;; what's going to be built.
             (built-derivations (list profile))
 
-            ;; Note: Caching is fine even when AUTHENTICATE? is false because
-            ;; we always call 'latest-channel-instances?'.
-            (symlink* (derivation->output-path profile) cached)
-            (add-indirect-root* cached)
-            (return cached))))))
+            ;; Cache if and only if AUTHENTICATE? is true.
+            (if authenticate?
+                (mbegin %store-monad
+                  (symlink* (derivation->output-path profile) cached)
+                  (add-indirect-root* cached)
+                  (return cached))
+                (mbegin %store-monad
+                  (add-temp-root* profile)
+                  (return profile))))))))
 
 (define* (inferior-for-channels channels
                                 #:key