GNU bug report logs - #49149
[PATCH 0/7] Add deb format for guix pack.

Previous Next

Package: guix-patches;

Reported by: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

Date: Mon, 21 Jun 2021 06:11:02 UTC

Severity: normal

Tags: patch

Done: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
To: Maxime Devos <maximedevos <at> telenet.be>
Cc: 49149 <at> debbugs.gnu.org
Subject: [bug#49149] [PATCH 4/7] pack: Improve naming of the packs store file names.
Date: Thu, 24 Jun 2021 00:44:13 -0400
Hello Maxime & Ludovic,

Maxime Devos <maximedevos <at> telenet.be> writes:

>> I'm not sure how the expansion would be usable in the module it is
>> defined?  It seems I could manage to get 'manifest->friendly-name' to be
>> a procedure returning a gexp, but that gexp wouldn't be readily usable
>> in that module (it could only be used when gexp-unquote from inside
>> another G-Exp), and the expansion in the macro above doesn't bind any
>> identifier, unless I'm missing something?
>
> The macro does two things: define a procedure manifest->friendly-name
> that returns a string.
>
> (define (manifest->friendly-name manifest)
>   "Return a friendly name computed from the entries in MANIFEST, a
>   <manifest> object."
>   (let loop ((names (map manifest-entry-name
>                       (manifest-entries manifest))))
>     (define str (string-join names "-"))
>       (if (< (string-length str) 40)
>           str
>           (match names
>             ((_) str)
>             ((names ... _) (loop names))))))) ;drop one entry
>
> and also define a G-exp define-manifest->friendly-name
>
> (define define-manifest->friendly-nam
>   #~(define (manifest->friendly-name manifes)
>       "Return a friendly name [...]"
>       [...])

Thanks a lot for persevering in your explanations, that made it clear
and with some ideas from the fine folks in #guile was able to come up
with this:

--8<---------------cut here---------------start------------->8---
(define-syntax-rule (define-with-source (variable args ...) body body* ...)
  "Bind VARIABLE to a procedure accepting ARGS defined as BODY, also setting
its source property."
  (begin
    (define (variable args ...)
      body)
    (eval-when (load eval)
      (set-procedure-property! variable 'source
                               '(define (variable args ...) body body* ...)))))

(define-with-source (manifest->friendly-name manifest)
  "Return a friendly name computed from the entries in MANIFEST, a
<manifest> object."
  (let loop ((names (map manifest-entry-name
                         (manifest-entries manifest))))
    (define str (string-join names "-"))
    (if (< (string-length str) 40)
        str
        (match names
          ((_) str)
          ((names ... _) (loop names))))))
--8<---------------cut here---------------end--------------->8---

And then use it inside the build G-Exp via:

#$(procedure-source manifest->friendly-name)

The pack tests are still passing.

Maxim




This bug report was last modified 4 years and 42 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.