Subject: bug#38529: Make --ad-hoc the default for guix environment proposed deprecation mechanism

From: Gábor Boskovits <[email-masked]>
Date: Thu, 12 Dec 2019 21:54:41 +0100

Hello,

zimoun <[email-masked]> ezt írta (időpont: 2019. dec. 12., Csü
17:47):

> Hi Gábor,
>
> Thank you for summarizing the discussion on IRC that I missed.
>
> Maybe I miss a point. Is the aim to conserve the "--ad-hoc" option
> with a different effect? Or why do we want to conserve this option
> name?
> It appears to me simpler to give another name, for example
> "--inputs-of". And it is more meaningful.
>
Sorry for the confusion. Ad-hoc should be retained with the same effect, so
that we do not break existing scripts.
Renamin the option would be ok. It even makes sense to me.

>
>
> To be concrete, the different cases; (-) means current behavior and
> (+) the new one:
>
> 1.
> - guix environment foo
> + guix environment --inputs-of foo
>
> 2.
> - guix environment --ad-hoc bar
> + guix environment bar
>
>
> First, when "--ad-hoc" is used then it reports a warning: deprecated
> option and falls in the current behavior.
> When "--inputs-of" is used then it falls in the new behavior.
> Therefore, no needs of the ugly "--ignore-deprecated-ad-hoc".
>
That could be done. The problem is caused by uses of guix environment that
does not use any of these options. Those mean different things after the
change.

>
>
> In other words, with the same future guix version,
>
>  # Alice
>  $ guix environment foo --ad-hoc bar
>  Warning: deprecated... explanations...
>                instead use:
>                 guix environment bar --inputs-of foo
>
>  # Bob
>  $ guix environment bar --inputs-of foo
>
>
> Second, the previous "guix environment foo" (dependencies of foo) is
> inconsistent with the new "guix environment bar" (only the package
> bar). Therefore, let introduce the GUIX_ENVIRONMENT_DEPRECATED
> variable to distinguish both, as you said.
>
Ok.

>
>  # Alice
>  $ guix environment foo
>  Warning: previous behavior requires GUIX_ENVIRONMENT_DEPRECATED=1
>                turn off the warning: GUIX_ENVIRONMENT_NOWARNING=1
>
> And Alice has now a new shell with the package foo. If she wants the
> dependencies, she has two options:
>
> $ GUIX_ENVIRONMENT=1 guix environment foo
> or
> $ guix environment --inputs-of foo
>
>
>  # Bob
>  $ guix environment bar
>  Warning: previous behavior requires GUIX_ENVIRONMENT
>
> And if Bob is annoyed by the warnings each time, he globally turns off
> with the variable GUIX_ENVIRONMENT_NOWARNING=1.
>
>
> Couple of months later -- after the period adoption -- we remove the
> variables GUIX_ENVIRONMENT_NOWARNING and GUIX_ENVIRONMENT_DEPRECATED;
> still keeping the warning with the "--ad-hoc" option. And then, after
> we can remove the "--ad-hoc" option if required.
>
>
> Maybe a miss a point. But the addition of the flag appears
> "--too-long-to-type" to me ugly.
>
We could recommend simply to use something like:
GUIX_ENVIRONMENT_DEPRECATED=0 guix environment ...
Instead in existing scripts that are fixed to use the new syntax. This
indeed looks like a better solution, and it is less of a maintenance
burden. Good idea.

> What do you think?
> All the best,
> simon

Summarizing:
Introduce the environment variable.
For fixed scripts recommend unsetting the environment variable.

That looks like a better plan. Thanks for your insights.

Best regards,
g_bor