Subject: Re: bug#46776: [PATCH] inferior: Extend cached-channel-instance scope.

From: Ludovic Courtès <[email-masked]>
Date: Mon, 01 Mar 2021 15:47:19 +0100

Hi,

Mathieu Othacehe <[email-masked]> 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’.