git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] help: interpret boolean string values for help.autocorrect

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 9, 2025, 16:32 UTC
Message-ID
<xmqq5xmoj6cz.fsf@gitster.g>
In-Reply-To
<pull.1869.v2.git.git.1736419777235.gitgitgadget@gmail.com>
"Scott Chacon via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 16 quoted lines
> diff --git a/Documentation/config/help.txt b/Documentation/config/help.txt
> index 610701f9a37..6d9c2e06908 100644
> --- a/Documentation/config/help.txt
> +++ b/Documentation/config/help.txt
> @@ -11,8 +11,9 @@ help.autoCorrect::
>  	If git detects typos and can identify exactly one valid command similar
>  	to the error, git will try to suggest the correct command or even
>  	run the suggestion automatically. Possible config values are:
> -	 - 0 (default): show the suggested command.
> -	 - positive number: run the suggested command after specified
> +	 - 0, false boolean string: show the suggested command (default).
> +	 - 1, true boolean string: run the suggested command immediately.
> +	 - positive number > 1: run the suggested command after specified
>  deciseconds (0.1 sec).
>  	 - "immediate": run the suggested command immediately.
>  	 - "prompt": show the suggestion and prompt for confirmation to run

Not a problem this patch introduces, but it looed funny to see the second line abut to the left edge of the page there.

In any case, the updated semantics look quite sensible.
Show 28 quoted lines
> diff --git a/help.c b/help.c
> index 5483ea8fd29..9e0f66c26dc 100644
> --- a/help.c
> +++ b/help.c
> @@ -573,9 +573,21 @@ static int git_unknown_cmd_config(const char *var, const char *value,
>  		} else if (!strcmp(value, "prompt")) {
>  			cfg->autocorrect = AUTOCORRECT_PROMPT;
>  		} else {
> -			int v = git_config_int(var, value, ctx->kvi);
> -			cfg->autocorrect = (v < 0)
> -				? AUTOCORRECT_IMMEDIATELY : v;
> +			int is_bool;
> +			int v = git_config_bool_or_int(var, value, ctx->kvi, &is_bool);
> +			if (is_bool) {
> +				if (v == 0) {
> +					cfg->autocorrect = 0;
> +				} else {
> +					cfg->autocorrect = AUTOCORRECT_IMMEDIATELY;
> +				}
> +			} else {
> +				if (v < 0 || v == 1) {
> +					cfg->autocorrect = AUTOCORRECT_IMMEDIATELY;
> +				} else {
> +					cfg->autocorrect = v;
> +				}
> +			}
>  		}
>  	}

The flow looks nice, but the pre-context of this hunk starts like this:

		if (!value)
			return config_error_nonbool(var);
		if (!strcmp(value, "never")) {
			cfg->autocorrect = AUTOCORRECT_NEVER;
		} else if (!strcmp(value, "immediate")) {
			cfg->autocorrect = AUTOCORRECT_IMMEDIATELY;
		} else if (!strcmp(value, "prompt")) {

IOW, the new code added at the end of the if/else if/ cascade is way too late.

	"[help] autocorrect"

that specifies "true" has already been rejected as an error, with a now-stale error message saying that the variable is not a Boolean.

We may probably want to use git_parse_maybe_bool_text() upfront, like

	static int parse_autocorrect(const char *value)
	{
		switch (git_parse_maybe_bool_text(value)) {
	        case 1:
			return AUTOCORRECT_IMMEDIATELY;
		case 0:
			return AUTOCORRECT_NEVER;
		default: /* other random text */
			break;
		}
                if (!strcmp(value, "prompt"))
			return AUTOCORRECT_PROMPT;
		...
		if (!strcmp(value, "prompt"))
			return AUTOCORRECT_PROMPT;
                return 0;
	}
and then in git_unknown_cmd_config(), do something like
	if (!strcmp(var, "help.autocorrect")) {
		int v = parse_autocorrect(value);
                if (!v) {
                	v = git_config_int(var, value, ctx->kvi);
                        if (v < 0)
				v = AUTOCORRECT_IMMEDIATELY;
                }
                cfg->autocorrect = v;
	}
perhaps?
Previous: Scott Chacon via GitGitGadgetNext: Scott Chacon
Message 8 of 24 in “help: interpret help.autocorrect=1 as "immediate" rather than 0.1s”
  1. help: interpret help.autocorrect=1 as "immediate" rather than 0.1sScott Chacon via GitGitGadget, Jan 8, 2025
  2. Kristoffer HaugsbakkJan 8, 2025
  3. Johannes SchindelinJan 9, 2025
  4. Taylor BlauJan 13, 2025
  5. Junio C HamanoJan 9, 2025
  6. YongminJan 9, 2025
  7. help: interpret boolean string values for help.autocorrectScott Chacon via GitGitGadget, Jan 9, 2025
  8. Junio C HamanoJan 9, 2025
  9. Scott ChaconJan 10, 2025
  10. Scott ChaconJan 10, 2025
  11. Jeff KingJan 10, 2025
  12. Junio C HamanoJan 10, 2025
  13. help: interpret boolean string values for help.autocorrectScott Chacon via GitGitGadget, Jan 11, 2025
  14. Jeff KingJan 13, 2025
  15. Scott ChaconJan 13, 2025
  16. Junio C HamanoJan 13, 2025
  17. Junio C HamanoJan 18, 2025
  18. help: interpret boolean string values for help.autocorrectScott Chacon via GitGitGadget, Jan 13, 2025
  19. 1/2 help: show the suggested command when help.autocorrect is falseDavid Aguilar, Feb 1, 2025
  20. 2/2 help: add "show" as a valid configuration valueDavid Aguilar, Feb 1, 2025
  21. Junio C HamanoFeb 3, 2025
  22. Junio C HamanoFeb 3, 2025
  23. Jeff KingFeb 4, 2025
  24. Junio C HamanoFeb 4, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.