Subject: [bug#49149] [PATCH 4/7] pack: Improve naming of the packs store file names.

From: Maxime Devos <[email-masked]>
Date: Mon, 21 Jun 2021 20:11:54 +0200

Maxim Cournoyer schreef op ma 21-06-2021 om 02:12 [-0400]:
> Instead of just naming them by their pack type, add information from the
> package(s) they contain to make it easier to differentiate them.
> 
> * guix/scripts/pack.scm (manifest->friendly-name): Extract procedure from ...
> (docker-image): ... here.  Adjust REPOSITORY argument value accordingly.
> (guix-pack): Derive NAME using MANIFEST->FRIENDLY-NAME.
> ---
>  guix/scripts/pack.scm | 44 +++++++++++++++++++++++++------------------
>  1 file changed, 26 insertions(+), 18 deletions(-)
> 
> diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
> index 7ea97a4b7a..9d4bb9f497 100644
> --- a/guix/scripts/pack.scm
> +++ b/guix/scripts/pack.scm
> @@ -172,6 +172,23 @@ dependencies are registered."
>    (computed-file "store-database" build
>                   #:options `(#:references-graphs ,(zip labels items))))
>  
> +;;; XXX: The following procedure has to *also* be used in the build side
> +;;; G-Exp, because PROFILE is passed as a derivation in the tests.
> +(define define-manifest->friendly-name
> +  '(define (manifest->friendly-name manifest) [...]))
>
> +(eval define-manifest->friendly-name (current-module))

You can avoid 'eval' here by defining 'manifest->friendly-name
in a separate guix/build/pack-utils.scm module.
Alternatively, some macroology (untested, may need some tweaks):

(define-syntax define-gexp-and-expand
  ((_ variable code code* ...)
   (begin (define variable #~(code code* ...))
          code code* ...)))

(define-gexp-and-expand define-manifest->friendly-name
  (define (manifest->friendly-name manifest)
    [... docstring]
    [... all the code]))

Greetings,
Maxime.