GNU bug report logs - #40365
[PATCH] guix: Improve docstring of wrap-program.

Previous Next

Package: guix-patches;

Reported by: Brendan Tildesley <mail <at> brendan.scot>

Date: Wed, 1 Apr 2020 05:31:02 UTC

Severity: minor

Tags: patch

To reply to this bug, email your comments to 40365 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#40365; Package guix-patches. (Wed, 01 Apr 2020 05:31:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Brendan Tildesley <mail <at> brendan.scot>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Wed, 01 Apr 2020 05:31:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Brendan Tildesley <mail <at> brendan.scot>
To: guix-patches <at> gnu.org
Subject: [PATCH] guix: Improve docstring of wrap-program.
Date: Wed,  1 Apr 2020 16:29:49 +1100
* guix/build/utils.scm (wrap-progran): Add an explanation for POSITION. Change
'DIRECTORIES' to 'VALUES' since an environment variable might not only be
paths.'
---
 guix/build/utils.scm | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index b8be73ead4..ba4d1d8657 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2015, 2018 Mark H Weaver <mhw <at> netris.org>
 ;;; Copyright © 2018 Arun Isaac <arunisaac <at> systemreboot.net>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado <at> elephly.net>
+;;; Copyright © 2020 Brendan Tildesley <mail <at> brendan.scot>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1114,13 +1115,20 @@ known as `nuke-refs' in Nixpkgs."
               (string-suffix? "-real" base)))))
 
 (define* (wrap-program prog #:rest vars)
-  "Make a wrapper for PROG.  VARS should look like this:
+  "Make a wrapper for PROG.  VARS is a list of lists that should look like this:
 
-  '(VARIABLE DELIMITER POSITION LIST-OF-DIRECTORIES)
+  '(VARIABLE DELIMITER POSITION LIST-OF-VALUES)
 
 where DELIMITER is optional.  ':' will be used if DELIMITER is not given.
-
-For example, this command:
+POSITION is a Scheme symbol of either =, prefix, or suffix that selects how
+the export VARIABLE line is formatted.  prefix and suffix each result in
+including values from the users environment either after or before VALUE,
+whereas = overshadows any existing value, preventing the users environment
+from 'infecting' the wrapped programs environment.  It is important to
+understand how each variable is used by the program so that the correct choice
+can be made.  Otherwise, the program could malfunction in unexpected ways on a
+different persons computer due to a difference in the inherited environment
+variables.  For example, this command:
 
   (wrap-program \"foo\"
                 '(\"PATH\" \":\" = (\"/gnu/.../bar/bin\"))
-- 
2.26.0





Information forwarded to guix-patches <at> gnu.org:
bug#40365; Package guix-patches. (Sat, 21 Nov 2020 10:18:01 GMT) Full text and rfc822 format available.

Message #8 received at 40365 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: Brendan Tildesley <mail <at> brendan.scot>
Cc: 40365 <at> debbugs.gnu.org
Subject: Re: [bug#40365] [PATCH] guix: Improve docstring of wrap-program.
Date: Sat, 21 Nov 2020 10:17:52 +0000
[Message part 1 (text/plain, inline)]
Brendan Tildesley <mail <at> brendan.scot> writes:

> * guix/build/utils.scm (wrap-progran): Add an explanation for POSITION. Change
> 'DIRECTORIES' to 'VALUES' since an environment variable might not only be
> paths.'
> ---
>  guix/build/utils.scm | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)

Thanks Brendan, and apologies that it's taken a while to review this.

I made some tweaks to end up with this:

 (define* (wrap-program prog #:rest vars)
-  "Make a wrapper for PROG.  VARS should look like this:
+  "Make a wrapper for PROG.  VARS is a list of lists that should look like this:

-  '(VARIABLE DELIMITER POSITION LIST-OF-DIRECTORIES)
+  '(VARIABLE DELIMITER POSITION LIST-OF-VALUES)

 where DELIMITER is optional.  ':' will be used if DELIMITER is not given.

+POSITION is a symbol, either =, prefix, or suffix that selects how the
+LIST-OF-VALUES are consolidated with the value of VARIABLE at the time the
+wrapped program is run.  prefix and suffix each result in including values
+from the users environment either before or after LIST-OF-VALUES respectively,
+whereas = replaces any existing value for VARIABLE.  It is important to
+understand how each variable is used by the program so that the correct choice
+can be made.
+

I'll hopefully describe why below. Anyway, let me know what you think,
I'm happy to push some improvements to this.

There's a bit of a cost to updating this file, since I believe changing
it will effectively trigger every Guix package's derivation to change,
hence it will need to be done on the core-updates branch.

> diff --git a/guix/build/utils.scm b/guix/build/utils.scm
> index b8be73ead4..ba4d1d8657 100644
> --- a/guix/build/utils.scm
> +++ b/guix/build/utils.scm
> @@ -5,6 +5,7 @@
>  ;;; Copyright © 2015, 2018 Mark H Weaver <mhw <at> netris.org>
>  ;;; Copyright © 2018 Arun Isaac <arunisaac <at> systemreboot.net>
>  ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado <at> elephly.net>
> +;;; Copyright © 2020 Brendan Tildesley <mail <at> brendan.scot>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -1114,13 +1115,20 @@ known as `nuke-refs' in Nixpkgs."
>                (string-suffix? "-real" base)))))
>
>  (define* (wrap-program prog #:rest vars)
> -  "Make a wrapper for PROG.  VARS should look like this:
> +  "Make a wrapper for PROG.  VARS is a list of lists that should look like this:

I'm not sure I'd describe vars as a list of lists, I think I see what
you're getting at, in that there can be more than one thing in vars, but
from the perspective of a user of this procedure, you don't pass in a
list of list, just one or more arguments at the end.

>
> -  '(VARIABLE DELIMITER POSITION LIST-OF-DIRECTORIES)
> +  '(VARIABLE DELIMITER POSITION LIST-OF-VALUES)
>
>  where DELIMITER is optional.  ':' will be used if DELIMITER is not given.
> -
> -For example, this command:
> +POSITION is a Scheme symbol of either =, prefix, or suffix that selects how
> +the export VARIABLE line is formatted.  prefix and suffix each result in

Rather than talking about formatting here, I tried to say something
about "consolidation", although maybe that's too complicated.

> +including values from the users environment either after or before VALUE,
> +whereas = overshadows any existing value, preventing the users environment
> +from 'infecting' the wrapped programs environment.  It is important to
> +understand how each variable is used by the program so that the correct choice
> +can be made.  Otherwise, the program could malfunction in unexpected ways on a
> +different persons computer due to a difference in the inherited environment
> +variables.  For example, this command:

I'm not sure about including this "Otherwise ..." bit, I think what you
say prior is sufficient.

>
>    (wrap-program \"foo\"
>                  '(\"PATH\" \":\" = (\"/gnu/.../bar/bin\"))

Thanks again,

Chris
[signature.asc (application/pgp-signature, inline)]

This bug report was last modified 3 years and 363 days ago.

Previous Next


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