Message ID | 20210225172048.22398-1-othacehe@gnu.org |
---|---|
State | Accepted |
Headers | show |
Series | [bug#46776] inferior: Extend cached-channel-instance scope. | expand |
Context | Check | Description |
---|---|---|
cbaines/comparison | success | View comparision |
cbaines/git branch | success | View Git branch |
cbaines/applying patch | success | View Laminar job |
cbaines/issue | success | View issue |
Hi, Mathieu Othacehe <othacehe@gnu.org> skribis: > * guix/inferior.scm (cached-channel-instance): Turn channels argument into > channels-or-instances. Adapt the rest of the procedure. [...] > (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))) 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? Thanks, Ludo’.
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
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