Subject: Re: [PATCH v2 4/5] builtin/help: add --config-all-for-completion

From: Patrick Steinhardt <[email-masked]>
Date: Thu, 8 Feb 2024 08:42:18 +0100

On Mon, Jan 29, 2024 at 01:28:00PM +0000, Philippe Blain via GitGitGadget wrote:
> From: Philippe Blain <[email-masked]>
> 
> There is currently no machine-friendly way to show _all_ configuration
> variables from the command line. 'git help --config' does show them all,
> but it also sets up the pager. 'git help --config-for-completion' omits
> some variables (those containing wildcards, for example) and 'git help
> --config-section-for-completion' shows only top-level section names.

You can invoke `git --no-pager help --config` so that Git does not set
up the pager. Is there a reason why we can't use that?

> In a following commit we will want to have access to a list of all
> configuration variables from the Bash completion script. As such, add a
> new mode for the command, HELP_ACTION_CONFIG_ALL_FOR_COMPLETION,
> triggered by the new option '--config-all-for-completion'. In this mode,
> show all variables, just as HELP_ACTION_CONFIG, but do not set up the
> pager.
> 
> Signed-off-by: Philippe Blain <[email-masked]>
> ---
>  builtin/help.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/builtin/help.c b/builtin/help.c
> index dc1fbe2b986..dacaeb10bf4 100644
> --- a/builtin/help.c
> +++ b/builtin/help.c
> @@ -50,6 +50,7 @@ static enum help_action {
>  	HELP_ACTION_DEVELOPER_INTERFACES,
>  	HELP_ACTION_CONFIG_FOR_COMPLETION,
>  	HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION,
> +	HELP_ACTION_CONFIG_ALL_FOR_COMPLETION,
>  } cmd_mode;
>  
>  static const char *html_path;
> @@ -86,6 +87,8 @@ static struct option builtin_help_options[] = {
>  		    HELP_ACTION_CONFIG_FOR_COMPLETION, PARSE_OPT_HIDDEN),
>  	OPT_CMDMODE_F(0, "config-sections-for-completion", &cmd_mode, "",
>  		    HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION, PARSE_OPT_HIDDEN),
> +	OPT_CMDMODE_F(0, "config-all-for-completion", &cmd_mode, "",
> +		    HELP_ACTION_CONFIG_ALL_FOR_COMPLETION, PARSE_OPT_HIDDEN),
>  
>  	OPT_END(),
>  };
> @@ -670,6 +673,10 @@ int cmd_help(int argc, const char **argv, const char *prefix)
>  		opt_mode_usage(argc, "--config-for-completion", help_format);
>  		list_config_help(SHOW_CONFIG_VARS);
>  		return 0;
> +	case HELP_ACTION_CONFIG_ALL_FOR_COMPLETION:
> +		opt_mode_usage(argc, "--config-all-for-completion", help_format);
> +		list_config_help(SHOW_CONFIG_HUMAN);
> +		return 0;
>  	case HELP_ACTION_USER_INTERFACES:
>  		opt_mode_usage(argc, "--user-interfaces", help_format);
>  		list_user_interfaces_help();

We should add a testcase to "t0012-help.sh" to exercise this new
feature. That would also help show the reviewer what exactly it will end
up printing.

Patrick