--- Begin Message ---
Subject: |
[PATCH] inferior: Extend cached-channel-instance scope. |
Date: |
Thu, 25 Feb 2021 18:20:48 +0100 |
* guix/inferior.scm (cached-channel-instance): Turn channels argument into
channels-or-instances. Adapt the rest of the procedure.
---
guix/inferior.scm | 31 ++++++++++++++++++++++---------
1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/guix/inferior.scm b/guix/inferior.scm
index 0990696e6c..06a187b879 100644
--- a/guix/inferior.scm
+++ b/guix/inferior.scm
@@ -709,20 +709,30 @@ prefix, resolve it; and if 'commit' is unset, fetch
CHANNEL's branch tip."
commit))))
(define* (cached-channel-instance store
- channels
+ channels-or-instances
#:key
(authenticate? #t)
(cache-directory (%inferior-cache-directory))
(ttl (* 3600 24 30)))
- "Return a directory containing a guix filetree defined by CHANNELS, a list
of channels.
-The directory is a subdirectory of CACHE-DIRECTORY, where entries can be
reclaimed after TTL seconds.
-This procedure opens a new connection to the build daemon. AUTHENTICATE?
-determines whether CHANNELS are authenticated."
+ "Return a directory containing a guix filetree defined by
+CHANNELS-OR-INSTANCES, a list of channels or channel instances. The directory
+is a subdirectory of CACHE-DIRECTORY, where entries can be reclaimed after TTL
+seconds. This procedure opens a new connection to the build daemon.
+AUTHENTICATE? determines whether CHANNELS are authenticated."
+ ;; Determine if we are dealing with channels or channel instances.
+ (define channels?
+ (match (pk channels-or-instances)
+ (((? channel? c) rest ...)
+ #t)
+ (else #f)))
+
(define commits
;; Since computing the instances of CHANNELS is I/O-intensive, use a
;; cheaper way to get the commit list of CHANNELS. This limits overhead
;; to the minimum in case of a cache hit.
- (map channel-full-commit channels))
+ (if channels?
+ (map channel-full-commit channels-or-instances)
+ (map channel-instance-commit channels-or-instances)))
(define key
(bytevector->base32-string
@@ -756,9 +766,12 @@ determines whether CHANNELS are authenticated."
cached
(run-with-store store
(mlet* %store-monad ((instances
- -> (latest-channel-instances store channels
- #:authenticate?
- authenticate?))
+ -> (if channels?
+ (latest-channel-instances
+ store channels-or-instances
+ #:authenticate?
+ authenticate?)
+ channels-or-instances))
(profile
(channel-instances->derivation instances)))
(mbegin %store-monad
--
2.30.1
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#46776: [PATCH] inferior: Extend cached-channel-instance scope. |
Date: |
Fri, 26 Mar 2021 10:54:35 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
Hello,
> This would only accept homogeneous lists, which is kinda weird.
>
> Could we instead have a separate procedure taking channel instances, and
> arrange to factorize common code in a third procedure?
I managed to rewrite Cuirass evaluation without modifying the inferior
API. Closing this one.
Thanks for having a look,
Mathieu
--- End Message ---