git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Scott Chacon via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org,
	 Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
	 Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	 Yongmin <yewon@revi.email>,  Scott Chacon <schacon@gmail.com>
Subject: Re: [PATCH v2] help: interpret boolean string values for help.autocorrect
Date: Thu, 09 Jan 2025 08:32:12 -0800	[thread overview]
Message-ID: <xmqq5xmoj6cz.fsf@gitster.g> (raw)
In-Reply-To: <pull.1869.v2.git.git.1736419777235.gitgitgadget@gmail.com> (Scott Chacon via GitGitGadget's message of "Thu, 09 Jan 2025 10:49:36 +0000")

"Scott Chacon via GitGitGadget" <gitgitgadget@gmail.com> writes:

> 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.

> 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?

  reply	other threads:[~2025-01-09 16:32 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-08 19:31 [PATCH] help: interpret help.autocorrect=1 as "immediate" rather than 0.1s Scott Chacon via GitGitGadget
2025-01-08 21:42 ` Kristoffer Haugsbakk
2025-01-09  0:18 ` Johannes Schindelin
2025-01-13 23:33   ` Taylor Blau
2025-01-09  1:12 ` Junio C Hamano
2025-01-09  7:05 ` Yongmin
2025-01-09 10:49 ` [PATCH v2] help: interpret boolean string values for help.autocorrect Scott Chacon via GitGitGadget
2025-01-09 16:32   ` Junio C Hamano [this message]
2025-01-10  7:43     ` Scott Chacon
2025-01-10  9:30       ` Scott Chacon
2025-01-10 12:11         ` Jeff King
2025-01-10 15:02           ` Junio C Hamano
2025-01-11 11:27   ` [PATCH v3] " Scott Chacon via GitGitGadget
2025-01-13  5:43     ` Jeff King
2025-01-13  9:31       ` Scott Chacon
2025-01-13 16:18       ` Junio C Hamano
2025-01-18  1:12         ` Junio C Hamano
2025-01-13  9:33     ` [PATCH v4] " Scott Chacon via GitGitGadget
2025-02-01 21:33       ` [PATCH 1/2] help: show the suggested command when help.autocorrect is false David Aguilar
2025-02-01 21:33         ` [PATCH 2/2] help: add "show" as a valid configuration value David Aguilar
2025-02-03 22:53           ` Junio C Hamano
2025-02-03 22:53         ` [PATCH 1/2] help: show the suggested command when help.autocorrect is false Junio C Hamano
2025-02-04  3:05           ` Jeff King
2025-02-04 13:38             ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqq5xmoj6cz.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=kristofferhaugsbakk@fastmail.com \
    --cc=schacon@gmail.com \
    --cc=yewon@revi.email \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).