Re: [PATCH v3 1/1] advice: add --no-advice global option
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Apr 30, 2024, 05:18 UTC
- Message-ID
- <ZjB_OJUQt7lbkOgz@tanuki>
- In-Reply-To
- <20240430014724.83813-2-james@jamesliu.io>
On Tue, Apr 30, 2024 at 11:47:24AM +1000, James Liu wrote: [snip]
Show 14 quoted lines
> diff --git a/environment.h b/environment.h > index 05fd94d7be..26e87843e1 100644 > --- a/environment.h > +++ b/environment.h > @@ -57,6 +57,13 @@ const char *getenv_safe(struct strvec *argv, const char *name); > #define GIT_TEXT_DOMAIN_DIR_ENVIRONMENT "GIT_TEXTDOMAINDIR" > #define GIT_ATTR_SOURCE_ENVIRONMENT "GIT_ATTR_SOURCE" > > +/* > + * Environment variable used to propagate the --no-advice global option to the > + * advice_enabled() helper, even when run in a subprocess. > + * This is an internal variable that should not be set by the user. > + */ > +#define GIT_ADVICE "GIT_ADVICE"
Almost all of the other defines in this file have an "_ENVIRONMENT" suffix. We should probably do the same here to mark it as the name of the environment variable, which otherwise wouldn't be obvious.
Show 37 quoted lines
> /*
> * Environment variable used in handshaking the wire protocol.
> * Contains a colon ':' separated list of keys with optional values
> diff --git a/git.c b/git.c
> index 654d615a18..6283d126e5 100644
> --- a/git.c
> +++ b/git.c
> @@ -38,7 +38,7 @@ const char git_usage_string[] =
> " [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
> " [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]\n"
> " [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
> - " [--config-env=<name>=<envvar>] <command> [<args>]");
> + " [--config-env=<name>=<envvar>] [--no-advice] <command> [<args>]");
>
> const char git_more_info_string[] =
> N_("'git help -a' and 'git help -g' list available subcommands and some\n"
> @@ -337,6 +337,10 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
> setenv(GIT_ATTR_SOURCE_ENVIRONMENT, cmd, 1);
> if (envchanged)
> *envchanged = 1;
> + } else if (!strcmp(cmd, "--no-advice")) {
> + setenv(GIT_ADVICE, "0", 1);
> + if (envchanged)
> + *envchanged = 1;
> } else {
> fprintf(stderr, _("unknown option: %s\n"), cmd);
> usage(git_usage_string);
> diff --git a/t/t0018-advice.sh b/t/t0018-advice.sh
> index 0dcfb760a2..2ce2d4668a 100755
> --- a/t/t0018-advice.sh
> +++ b/t/t0018-advice.sh
> @@ -29,4 +29,24 @@ test_expect_success 'advice should not be printed when config variable is set to
> test_must_be_empty actual
> '
>
> +test_expect_success 'advice should not be printed when --no-advice is used' '
> + cat << EOF > expect &&We typically write those `cat >expect <<-EOF`. I assume you cannot use the dash here because the "README" string is indented by a tab. But the order of redirects should still be reversed.
Show 12 quoted lines
> +On branch master > + > +No commits yet > + > +Untracked files: > + README > + > +nothing added to commit but untracked files present > +EOF > + > + git init advice-test && > + test_when_finished "rm -fr advice-test" &&
Let's run `test_when_finished` before creating the repo.
> + cd advice-test && > + touch README && > + git --no-advice status > ../actual && > + test_cmp ../expect ../actual
Nit: these should be indented by tabs, not spaces.
> +'
We could add two more tests that explicitly set the environment variable, once to `true` and once to `false`. This would at least somewhat represent the case of running Git subcommands, even though we cannot test whether Git actually knows to set the envvar like this.
Patrick
Show 5 quoted lines
> test_done > -- > 2.44.0 > >