]> git.ipfire.org Git - thirdparty/git.git/commitdiff
help: interpret boolean string values for help.autocorrect
authorScott Chacon <schacon@gmail.com>
Mon, 13 Jan 2025 09:33:44 +0000 (09:33 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Jan 2025 16:20:01 +0000 (08:20 -0800)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/help.txt
help.c

index 610701f9a3745e0253edf64a65ef1e313eec6660..a4c6079af81e6c66bbe53fc8cdcea2479ed07d86 100644 (file)
@@ -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", "immediate": run the suggested command
+immediately.
+        - positive number > 1: run the suggested command after specified
 deciseconds (0.1 sec).
-        - "immediate": run the suggested command immediately.
+        - "false", "off", "no", "never": don't run or show any suggested command.
         - "prompt": show the suggestion and prompt for confirmation to run
 the command.
-        - "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 5483ea8fd293fc9c072f4be33ec0e5778a3020d4..7148963e468cd2df9cbbd4f1a7aa3df9360f46bf 100644 (file)
--- 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));