* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
@ 2022-12-12 17:45 mirai
2022-12-12 20:34 ` Josselin Poiret via Guix-patches via
2022-12-21 13:31 ` [bug#60014] [PATCH v2] doc: Clarify special-files-service-type expected value mirai
0 siblings, 2 replies; 14+ messages in thread
From: mirai @ 2022-12-12 17:45 UTC (permalink / raw)
To: 60014; +Cc: Bruno Victal
From: Bruno Victal <mirai@makinata.eu>
special-files is a list of 2-tuples (pairs) but matching against
a non-list pair would fail as match-lambda was only matching
against a list pattern.
---
gnu/build/activation.scm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index 10c9045740..d4a7559651 100644
--- a/gnu/build/activation.scm
+++ b/gnu/build/activation.scm
@@ -341,7 +341,7 @@ (define (activate-special-files special-files)
"
(define install-special-file
(match-lambda
- ((target file)
+ ((or (target file) (? pair? (= car target) (= cdr file)))
(let ((pivot (string-append target ".new")))
(mkdir-p (dirname target))
(symlink file pivot)
base-commit: 5fb5af5658b7575a945579a7cf51c193600b76bb
--
2.38.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-12 17:45 [bug#60014] [PATCH] activation: make install-special-file match against pairs as well mirai
@ 2022-12-12 20:34 ` Josselin Poiret via Guix-patches via
2022-12-12 20:52 ` Tobias Geerinckx-Rice via Guix-patches via
` (2 more replies)
2022-12-21 13:31 ` [bug#60014] [PATCH v2] doc: Clarify special-files-service-type expected value mirai
1 sibling, 3 replies; 14+ messages in thread
From: Josselin Poiret via Guix-patches via @ 2022-12-12 20:34 UTC (permalink / raw)
To: mirai, 60014; +Cc: Bruno Victal
Hi Bruno,
Is this patch related to some specific problem you're running into? I
personally would prefer keeping the special file interface as-is, and
not mix two different kinds of entries: lists with 2 elements, and
pairs. That would avoid having to manage even more edge-cases down the
line if some more processing is needed.
Otherwise, you're missing the ChangeLog entry format for the commit
message, which you can find described at [1]. You can take some
inspiration from other commits in the repository.
Best,
--
Josselin Poiret
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-12 20:34 ` Josselin Poiret via Guix-patches via
@ 2022-12-12 20:52 ` Tobias Geerinckx-Rice via Guix-patches via
2022-12-12 22:25 ` mirai
2022-12-12 22:09 ` mirai
2022-12-20 14:47 ` Ludovic Courtès
2 siblings, 1 reply; 14+ messages in thread
From: Tobias Geerinckx-Rice via Guix-patches via @ 2022-12-12 20:52 UTC (permalink / raw)
To: Josselin Poiret; +Cc: 60014, mirai
[-- Attachment #1: Type: text/plain, Size: 661 bytes --]
Josselin Poiret via Guix-patches via 写道:
> I personally would prefer keeping the special file interface
> as-is, and
> not mix two different kinds of entries: lists with 2 elements,
> and
> pairs. That would avoid having to manage even more edge-cases
> down the
> line if some more processing is needed.
I agree with this reasoning, and would go as far as to say that if
this fixes anything, that thing should probably be fixed instead…?
‘Takes a list of As, but as a special case, a single A’ is
confusing and makes it that much harder for newcomers to move
beyond cargo-culting magical snippets.
Kind regards,
T G-R
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 247 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-12 20:34 ` Josselin Poiret via Guix-patches via
2022-12-12 20:52 ` Tobias Geerinckx-Rice via Guix-patches via
@ 2022-12-12 22:09 ` mirai
2022-12-13 10:15 ` Josselin Poiret via Guix-patches via
2022-12-20 14:47 ` Ludovic Courtès
2 siblings, 1 reply; 14+ messages in thread
From: mirai @ 2022-12-12 22:09 UTC (permalink / raw)
To: Josselin Poiret, 60014
On 2022-12-12 20:34, Josselin Poiret wrote:
> Hi Bruno,
>
> Is this patch related to some specific problem you're running into? I
> personally would prefer keeping the special file interface as-is, and
> not mix two different kinds of entries: lists with 2 elements, and
> pairs. That would avoid having to manage even more edge-cases down the
> line if some more processing is needed.
I'm writing a service definition that uses a special-files-service-type service-extension.
The documentation for it says:
--8<---------------cut here---------------start------------->8---
The value associated with special-files-service-type services must be a list of tuples where the first element is the “special file” and the second element is its target.
--8<---------------cut here---------------end--------------->8---
I assume a pair is a reasonable interpretation of 'tuples' in this context, so I proceeded to serialize the fields with:
--8<---------------cut here---------------start------------->8---
(cons "filename here" (mixed-text-file "filename" contents ...))
--8<---------------cut here---------------end--------------->8---
Which I think is the natural way of doing it. (and communicates the intent, a pair with a path and a file-like object.)
Of course, (list "path" file-like-obj) works as well but imo the pair is clearer in purpose.
(what meaning would the third element and so on have, if ever present?)
This I found out the hard way by getting strange errors until I looked into what happens behind
`special-files-service-type' and realizing that only lists were accepted.
The mixing of cases is unfortunate (it should have been pairs from the start) but preserves
compatibility with existing syntax.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-12 20:52 ` Tobias Geerinckx-Rice via Guix-patches via
@ 2022-12-12 22:25 ` mirai
2022-12-13 20:04 ` Tobias Geerinckx-Rice via Guix-patches via
0 siblings, 1 reply; 14+ messages in thread
From: mirai @ 2022-12-12 22:25 UTC (permalink / raw)
To: Tobias Geerinckx-Rice, Josselin Poiret; +Cc: 60014
On 2022-12-12 20:52, Tobias Geerinckx-Rice wrote:
> Josselin Poiret via Guix-patches via 写道:
>> I personally would prefer keeping the special file interface as-is, and
>> not mix two different kinds of entries: lists with 2 elements, and
>> pairs. That would avoid having to manage even more edge-cases down the
>> line if some more processing is needed.
>
> I agree with this reasoning, and would go as far as to say that if this fixes anything, that thing should probably be fixed instead…?
>
> ‘Takes a list of As, but as a special case, a single A’ is confusing and makes it that much harder for newcomers to move beyond cargo-culting magical snippets.
That's not what's happening here, right now what guix does is: take a list of tuples, where tuples are 2-element lists of path + file-like.
This patch does: take a list of tuples, where tuples are pairs of path + file-like (and as a bonus,
preserve existing configurations by allowing the pairs to be lists as well).
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-12 22:09 ` mirai
@ 2022-12-13 10:15 ` Josselin Poiret via Guix-patches via
2022-12-13 13:04 ` mirai
0 siblings, 1 reply; 14+ messages in thread
From: Josselin Poiret via Guix-patches via @ 2022-12-13 10:15 UTC (permalink / raw)
To: mirai, 60014
Hi Bruno,
mirai <mirai@makinata.eu> writes:
> The documentation for it says:
> --8<---------------cut here---------------start------------->8---
> The value associated with special-files-service-type services must be a list of tuples where the first element is the “special file” and the second element is its target.
> --8<---------------cut here---------------end--------------->8---
>
> Which I think is the natural way of doing it. (and communicates the intent, a pair with a path and a file-like object.)
Right, that's unfortunate, although that could be changed to “list of
lists” to make it clearer.
> Of course, (list "path" file-like-obj) works as well but imo the pair is clearer in purpose.
> (what meaning would the third element and so on have, if ever present?)
> This I found out the hard way by getting strange errors until I looked into what happens behind
> `special-files-service-type' and realizing that only lists were accepted.
>
> The mixing of cases is unfortunate (it should have been pairs from the start) but preserves
> compatibility with existing syntax.
I agree with you here, but then I think to avoid having to maintain both
cases at the same time, all existing uses of special-files-service-type
should also be modified, and only one kind should remain, with the other
triggering some deprecation warning. You could match to `(path
. file-like)`, and if (list? file-like), throw an exception.
As a sidenote, the main problem is that Guile is not a statically typed
language, but that's a whole other debate to have.
In any case, I don't think this patch will be accepted as-is. I would
only be partially in favor of the second solution (because it breaks
existing code), while the first solution is low-effort and should work
well enough. Up to you (and maintainers) to decide.
Best,
--
Josselin Poiret
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-13 10:15 ` Josselin Poiret via Guix-patches via
@ 2022-12-13 13:04 ` mirai
2022-12-13 19:56 ` Josselin Poiret via Guix-patches via
0 siblings, 1 reply; 14+ messages in thread
From: mirai @ 2022-12-13 13:04 UTC (permalink / raw)
To: Josselin Poiret, 60014
On 2022-12-13 10:15, Josselin Poiret wrote:
> Hi Bruno,
>
> mirai <mirai@makinata.eu> writes:
>
>> The documentation for it says:
>> --8<---------------cut here---------------start------------->8---
>> The value associated with special-files-service-type services must be a list of tuples where the first element is the “special file” and the second element is its target.
>> --8<---------------cut here---------------end--------------->8---
>>
>> Which I think is the natural way of doing it. (and communicates the intent, a pair with a path and a file-like object.)
>
> Right, that's unfortunate, although that could be changed to “list of
> lists” to make it clearer.
>
>> Of course, (list "path" file-like-obj) works as well but imo the pair is clearer in purpose.
>> (what meaning would the third element and so on have, if ever present?)
>> This I found out the hard way by getting strange errors until I looked into what happens behind
>> `special-files-service-type' and realizing that only lists were accepted.
>>
>> The mixing of cases is unfortunate (it should have been pairs from the start) but preserves
>> compatibility with existing syntax.
>
> I agree with you here, but then I think to avoid having to maintain both
> cases at the same time, all existing uses of special-files-service-type
> should also be modified, and only one kind should remain, with the other
> triggering some deprecation warning. You could match to `(path
> . file-like)`, and if (list? file-like), throw an exception.
The `(= car target) (= cdr file)' match pattern is lifted from
https://git.savannah.gnu.org/cgit/guile.git/tree/module/ice-9/match.upstream.scm?id=b54263dc98b2700fa777745405ad7651601bcdc6#n139
as Guile's Pattern Matching page doesn't specify how to match against pairs when I was looking into it.
> As a sidenote, the main problem is that Guile is not a statically typed
> language, but that's a whole other debate to have.
>
> In any case, I don't think this patch will be accepted as-is. I would
> only be partially in favor of the second solution (because it breaks
> existing code), while the first solution is low-effort and should work
> well enough. Up to you (and maintainers) to decide.
A breaking change here (or a non-breaking "deprecated" warning similar to how
bootloader target field was renamed to targets can be done too, but before
any further changes its best to discuss if such a change will be received.
On 2022-12-12 20:34, Josselin Poiret wrote:
> Otherwise, you're missing the ChangeLog entry format for the commit
> message, which you can find described at [1]. You can take some
> inspiration from other commits in the repository.
I'm missing the link at [1], could you resend it?
Cheers,
Bruno
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-13 13:04 ` mirai
@ 2022-12-13 19:56 ` Josselin Poiret via Guix-patches via
0 siblings, 0 replies; 14+ messages in thread
From: Josselin Poiret via Guix-patches via @ 2022-12-13 19:56 UTC (permalink / raw)
To: mirai, 60014
mirai <mirai@makinata.eu> writes:
> I'm missing the link at [1], could you resend it?
My bad, here it is
[1] https://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs
--
Josselin Poiret
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-12 22:25 ` mirai
@ 2022-12-13 20:04 ` Tobias Geerinckx-Rice via Guix-patches via
0 siblings, 0 replies; 14+ messages in thread
From: Tobias Geerinckx-Rice via Guix-patches via @ 2022-12-13 20:04 UTC (permalink / raw)
To: mirai; +Cc: dev, 60014
[-- Attachment #1: Type: text/plain, Size: 461 bytes --]
Heyo,
mirai 写道:
> This patch does: take a list of tuples, where tuples are pairs
> of path + file-like
This is fine.
> (and as a bonus,
> preserve existing configurations by allowing the pairs to be
> lists as well).
This not so much. I guess my example was poorly chosen, but at
least deprecate the old style, as jpoiret also suggests. That
does not mean you need to instantly break old configurations.
Kind regards,
T G-R
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 247 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-12 20:34 ` Josselin Poiret via Guix-patches via
2022-12-12 20:52 ` Tobias Geerinckx-Rice via Guix-patches via
2022-12-12 22:09 ` mirai
@ 2022-12-20 14:47 ` Ludovic Courtès
2022-12-21 13:20 ` mirai
2 siblings, 1 reply; 14+ messages in thread
From: Ludovic Courtès @ 2022-12-20 14:47 UTC (permalink / raw)
To: Josselin Poiret; +Cc: 60014, mirai
Hi,
Josselin Poiret <dev@jpoiret.xyz> skribis:
> Is this patch related to some specific problem you're running into? I
> personally would prefer keeping the special file interface as-is, and
> not mix two different kinds of entries: lists with 2 elements, and
> pairs. That would avoid having to manage even more edge-cases down the
> line if some more processing is needed.
I agree. This is a public-facing interface so we should keep it as-is;
extending it to support pairs in addition to two-list elements would
likely bring confusion and bugs.
I’m not entirely sure why we settled on two-list elements rather than
pairs back then, but I think it’s OK.
Closing?
Ludo’.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH] activation: make install-special-file match against pairs as well.
2022-12-20 14:47 ` Ludovic Courtès
@ 2022-12-21 13:20 ` mirai
0 siblings, 0 replies; 14+ messages in thread
From: mirai @ 2022-12-21 13:20 UTC (permalink / raw)
To: Ludovic Courtès, Josselin Poiret; +Cc: 60014
Hi,
While thinking about this, I've noticed that using lists as "pairs"
is a pattern that is common in the existing guix code, with openssh-service-type
'authorized-keys' field and G-Expressions 'file-union' as examples.
Given the "entrenched" list usage, I don't think it's worth the effort to
change the whole system to use pairs at this point (or maybe allow it as it
probably just creates more confusion).
I will amend the special-files-service-type doc entry to clarify
that it expects two-element lists instead.
Bruno
On 2022-12-20 14:47, Ludovic Courtès wrote:
> Hi,
>
> Josselin Poiret <dev@jpoiret.xyz> skribis:
>
>> Is this patch related to some specific problem you're running into? I
>> personally would prefer keeping the special file interface as-is, and
>> not mix two different kinds of entries: lists with 2 elements, and
>> pairs. That would avoid having to manage even more edge-cases down the
>> line if some more processing is needed.
>
> I agree. This is a public-facing interface so we should keep it as-is;
> extending it to support pairs in addition to two-list elements would
> likely bring confusion and bugs.
>
> I’m not entirely sure why we settled on two-list elements rather than
> pairs back then, but I think it’s OK.
>
> Closing?
>
> Ludo’.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH v2] doc: Clarify special-files-service-type expected value.
2022-12-12 17:45 [bug#60014] [PATCH] activation: make install-special-file match against pairs as well mirai
2022-12-12 20:34 ` Josselin Poiret via Guix-patches via
@ 2022-12-21 13:31 ` mirai
2023-02-18 2:33 ` Bruno Victal
2023-03-21 14:15 ` bug#60014: " Maxim Cournoyer
1 sibling, 2 replies; 14+ messages in thread
From: mirai @ 2022-12-21 13:31 UTC (permalink / raw)
To: 60014; +Cc: Bruno Victal
From: Bruno Victal <mirai@makinata.eu>
* doc/guix.texi (Services, Base Services): Clarify special-files-service-type
expected value.
---
doc/guix.texi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index fd03da8c97..a9b6e1231d 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -17753,7 +17753,7 @@ This is the service that sets up ``special files'' such as
@file{/bin/sh}; an instance of it is part of @code{%base-services}.
The value associated with @code{special-files-service-type} services
-must be a list of tuples where the first element is the ``special file''
+must be a list of two-element lists where the first element is the ``special file''
and the second element is its target. By default it is:
@cindex @file{/bin/sh}
base-commit: 7833acab0da02335941974608510c02e2d1d8069
--
2.38.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [bug#60014] [PATCH v2] doc: Clarify special-files-service-type expected value.
2022-12-21 13:31 ` [bug#60014] [PATCH v2] doc: Clarify special-files-service-type expected value mirai
@ 2023-02-18 2:33 ` Bruno Victal
2023-03-21 14:15 ` bug#60014: " Maxim Cournoyer
1 sibling, 0 replies; 14+ messages in thread
From: Bruno Victal @ 2023-02-18 2:33 UTC (permalink / raw)
To: 60014
bump
^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60014: [PATCH v2] doc: Clarify special-files-service-type expected value.
2022-12-21 13:31 ` [bug#60014] [PATCH v2] doc: Clarify special-files-service-type expected value mirai
2023-02-18 2:33 ` Bruno Victal
@ 2023-03-21 14:15 ` Maxim Cournoyer
1 sibling, 0 replies; 14+ messages in thread
From: Maxim Cournoyer @ 2023-03-21 14:15 UTC (permalink / raw)
To: mirai; +Cc: 60014-done
Hello,
mirai@makinata.eu writes:
> From: Bruno Victal <mirai@makinata.eu>
>
> * doc/guix.texi (Services, Base Services): Clarify special-files-service-type
> expected value.
> ---
> doc/guix.texi | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index fd03da8c97..a9b6e1231d 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -17753,7 +17753,7 @@ This is the service that sets up ``special files'' such as
> @file{/bin/sh}; an instance of it is part of @code{%base-services}.
>
> The value associated with @code{special-files-service-type} services
> -must be a list of tuples where the first element is the ``special file''
> +must be a list of two-element lists where the first element is the ``special file''
> and the second element is its target. By default it is:
Applied!
--
Thanks,
Maxim
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2023-03-21 14:16 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-12 17:45 [bug#60014] [PATCH] activation: make install-special-file match against pairs as well mirai
2022-12-12 20:34 ` Josselin Poiret via Guix-patches via
2022-12-12 20:52 ` Tobias Geerinckx-Rice via Guix-patches via
2022-12-12 22:25 ` mirai
2022-12-13 20:04 ` Tobias Geerinckx-Rice via Guix-patches via
2022-12-12 22:09 ` mirai
2022-12-13 10:15 ` Josselin Poiret via Guix-patches via
2022-12-13 13:04 ` mirai
2022-12-13 19:56 ` Josselin Poiret via Guix-patches via
2022-12-20 14:47 ` Ludovic Courtès
2022-12-21 13:20 ` mirai
2022-12-21 13:31 ` [bug#60014] [PATCH v2] doc: Clarify special-files-service-type expected value mirai
2023-02-18 2:33 ` Bruno Victal
2023-03-21 14:15 ` bug#60014: " Maxim Cournoyer
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).