diff mbox series

[v2,4/5] builtin/help: add --config-all-for-completion

Message ID d442a039b27820dbd44e604df75ec026b8243d47.1706534882.git.gitgitgadget@gmail.com (mailing list archive)
State New, archived
Headers show
Series completion: remove hardcoded config variable names | expand

Commit Message

Philippe Blain Jan. 29, 2024, 1:28 p.m. UTC
From: Philippe Blain <levraiphilippeblain@gmail.com>

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.

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 <levraiphilippeblain@gmail.com>
---
 builtin/help.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Patrick Steinhardt Feb. 8, 2024, 7:42 a.m. UTC | #1
On Mon, Jan 29, 2024 at 01:28:00PM +0000, Philippe Blain via GitGitGadget wrote:
> From: Philippe Blain <levraiphilippeblain@gmail.com>
> 
> 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 <levraiphilippeblain@gmail.com>
> ---
>  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
Philippe Blain Feb. 10, 2024, 4:13 p.m. UTC | #2
Le 2024-02-08 à 02:42, Patrick Steinhardt a écrit :
> On Mon, Jan 29, 2024 at 01:28:00PM +0000, Philippe Blain via GitGitGadget wrote:
>> From: Philippe Blain <levraiphilippeblain@gmail.com>
>>
>> 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?

I'm glad to say there is no reason we can't use that! I just did not
think of it and dived straight into the C code. I'll use that in v3 and
just drop this patch from the series.

Thanks!

Philippe.
diff mbox series

Patch

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();