unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [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).