From: "Scott Chacon via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Yongmin <yewon@revi.email>, Jeff King <peff@peff.net>,
Scott Chacon <schacon@gmail.com>,
Scott Chacon <schacon@gmail.com>
Subject: [PATCH v3] help: interpret boolean string values for help.autocorrect
Date: Sat, 11 Jan 2025 11:27:19 +0000 [thread overview]
Message-ID: <pull.1869.v3.git.git.1736594839527.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1869.v2.git.git.1736419777235.gitgitgadget@gmail.com>
From: Scott Chacon <schacon@gmail.com>
A help.autocorrect value of 1 is currently interpreted as "wait 1
decisecond", which can be confusing to users who believe they are setting a
boolean value to turn the autocorrect feature on.
Interpret the value of help.autocorrect as either one of the accepted list
of special values ("never", "immediate", ...), a boolean or an integer. If
the value is 1, it is no longer interpreted as a decisecond value of 0.1s
but as a true boolean, the equivalent of "immediate". If the value is 2 or
more, continue treating it as a decisecond wait time.
False boolean string values ("off", "false", "no") are now equivalent to
"never", meaning that guessed values are still shown but nothing is
executed. True boolean string values are interpreted as "immediate".
Signed-off-by: Scott Chacon <schacon@gmail.com>
---
help: interpret boolean string values for help.autocorrect
Basically just using Junio's suggested code from the ML, splitting most
of the logic out into a parse_autocorrect method and then special casing
a 1 integer as "immediate". I reverted to interpreting false boolean
values as NEVER rather than 0, which means they no longer show guesses,
which the last patch did.
Changes since v2:
* split out most logic into parse_autocorrect
* interpret false boolean values as NEVER rather than 0
* Update the help.txt documentation
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1869%2Fschacon%2Fmaster-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1869/schacon/master-v3
Pull-Request: https://github.com/git/git/pull/1869
Range-diff vs v2:
1: 07b47b70ded ! 1: 4ce7652d19e help: interpret boolean string values for help.autocorrect
@@ Commit message
but as a true boolean, the equivalent of "immediate". If the value is 2 or
more, continue treating it as a decisecond wait time.
- False boolean string values ("off", "false", "no") are now equivalent to 0,
- meaning that guessed values are still shown but nothing is executed (as
- opposed to "never", which does not show the guesses). True boolean string
- values are interpreted as "immediate".
+ False boolean string values ("off", "false", "no") are now equivalent to
+ "never", meaning that guessed values are still shown but nothing is
+ executed. True boolean string values are interpreted as "immediate".
Signed-off-by: Scott Chacon <schacon@gmail.com>
@@ Documentation/config/help.txt: help.autoCorrect::
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.
++ - 0: show the suggested command (default).
++ - 1, "true", "on", "yes": 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
+ the command.
+- - "never": don't run or show any suggested command.
++ - "false", "off", "no", "never": don't run or show any suggested command.
+
+ help.htmlPath::
+ Specify the path where the HTML documentation resides. File system paths
## help.c ##
+@@ help.c: struct help_unknown_cmd_config {
+ #define AUTOCORRECT_NEVER (-2)
+ #define AUTOCORRECT_IMMEDIATELY (-1)
+
++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, "never"))
++ return AUTOCORRECT_NEVER;
++ if (!strcmp(value, "immediate"))
++ return AUTOCORRECT_IMMEDIATELY;
++
++ return 0;
++}
++
+ static int git_unknown_cmd_config(const char *var, const char *value,
+ const struct config_context *ctx,
+ void *cb)
@@ help.c: static int git_unknown_cmd_config(const char *var, const char *value,
- } else if (!strcmp(value, "prompt")) {
- cfg->autocorrect = AUTOCORRECT_PROMPT;
- } else {
+ const char *p;
+
+ if (!strcmp(var, "help.autocorrect")) {
+- 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")) {
+- 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;
-+ }
-+ }
++ int v = parse_autocorrect(value);
++
++ if (!v) {
++ v = git_config_int(var, value, ctx->kvi);
++ if (v < 0 || v == 1)
++ v = AUTOCORRECT_IMMEDIATELY;
}
++
++ cfg->autocorrect = v;
}
++
/* Also use aliases for command lookup */
+ if (skip_prefix(var, "alias.", &p))
+ add_cmdname(&cfg->aliases, p, strlen(p));
Documentation/config/help.txt | 7 +++---
help.c | 42 +++++++++++++++++++++++++----------
2 files changed, 34 insertions(+), 15 deletions(-)
diff --git a/Documentation/config/help.txt b/Documentation/config/help.txt
index 610701f9a37..16b124b1c17 100644
--- a/Documentation/config/help.txt
+++ b/Documentation/config/help.txt
@@ -11,13 +11,14 @@ 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: show the suggested command (default).
+ - 1, "true", "on", "yes": 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
the command.
- - "never": don't run or show any suggested command.
+ - "false", "off", "no", "never": don't run or show any suggested command.
help.htmlPath::
Specify the path where the HTML documentation resides. File system paths
diff --git a/help.c b/help.c
index 5483ea8fd29..7148963e468 100644
--- a/help.c
+++ b/help.c
@@ -556,6 +556,27 @@ struct help_unknown_cmd_config {
#define AUTOCORRECT_NEVER (-2)
#define AUTOCORRECT_IMMEDIATELY (-1)
+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, "never"))
+ return AUTOCORRECT_NEVER;
+ if (!strcmp(value, "immediate"))
+ return AUTOCORRECT_IMMEDIATELY;
+
+ return 0;
+}
+
static int git_unknown_cmd_config(const char *var, const char *value,
const struct config_context *ctx,
void *cb)
@@ -564,20 +585,17 @@ static int git_unknown_cmd_config(const char *var, const char *value,
const char *p;
if (!strcmp(var, "help.autocorrect")) {
- 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")) {
- cfg->autocorrect = AUTOCORRECT_PROMPT;
- } else {
- int v = git_config_int(var, value, ctx->kvi);
- cfg->autocorrect = (v < 0)
- ? AUTOCORRECT_IMMEDIATELY : v;
+ int v = parse_autocorrect(value);
+
+ if (!v) {
+ v = git_config_int(var, value, ctx->kvi);
+ if (v < 0 || v == 1)
+ v = AUTOCORRECT_IMMEDIATELY;
}
+
+ cfg->autocorrect = v;
}
+
/* Also use aliases for command lookup */
if (skip_prefix(var, "alias.", &p))
add_cmdname(&cfg->aliases, p, strlen(p));
base-commit: fbe8d3079d4a96aeb4e4529cc93cc0043b759a05
--
gitgitgadget
next prev parent reply other threads:[~2025-01-11 11:27 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
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 ` Scott Chacon via GitGitGadget [this message]
2025-01-13 5:43 ` [PATCH v3] " 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=pull.1869.v3.git.git.1736594839527.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=peff@peff.net \
--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).