help: show the suggested command when help.autocorrect is false

Make the handling of false boolean values for help.autocorrect
consistent with the handling of value 0 by showing the suggested
commands but not running them.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
David Aguilar
2025-02-01 13:33:18 -08:00
committed by Junio C Hamano
parent a0fc18f042
commit e21bf2c431
3 changed files with 16 additions and 11 deletions

View File

@ -11,12 +11,12 @@ help.autoCorrect::
If git detects typos and can identify exactly one valid command similar 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 to the error, git will try to suggest the correct command or even
run the suggestion automatically. Possible config values are: run the suggestion automatically. Possible config values are:
- 0: show the suggested command (default). - 0, "false", "off", "no": show the suggested command (default).
- 1, "true", "on", "yes", "immediate": run the suggested command - 1, "true", "on", "yes", "immediate": run the suggested command
immediately. immediately.
- positive number > 1: run the suggested command after specified - positive number > 1: run the suggested command after specified
deciseconds (0.1 sec). deciseconds (0.1 sec).
- "false", "off", "no", "never": don't run or show any suggested command. - "never": don't run or show any suggested command.
- "prompt": show the suggestion and prompt for confirmation to run - "prompt": show the suggestion and prompt for confirmation to run
the command. the command.

6
help.c
View File

@ -552,6 +552,7 @@ struct help_unknown_cmd_config {
struct cmdnames aliases; struct cmdnames aliases;
}; };
#define AUTOCORRECT_SHOW (-4)
#define AUTOCORRECT_PROMPT (-3) #define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2) #define AUTOCORRECT_NEVER (-2)
#define AUTOCORRECT_IMMEDIATELY (-1) #define AUTOCORRECT_IMMEDIATELY (-1)
@ -562,7 +563,7 @@ static int parse_autocorrect(const char *value)
case 1: case 1:
return AUTOCORRECT_IMMEDIATELY; return AUTOCORRECT_IMMEDIATELY;
case 0: case 0:
return AUTOCORRECT_NEVER; return AUTOCORRECT_SHOW;
default: /* other random text */ default: /* other random text */
break; break;
} }
@ -713,7 +714,8 @@ char *help_unknown_cmd(const char *cmd)
n++) n++)
; /* still counting */ ; /* still counting */
} }
if (cfg.autocorrect && n == 1 && SIMILAR_ENOUGH(best_similarity)) { if (cfg.autocorrect && cfg.autocorrect != AUTOCORRECT_SHOW && n == 1 &&
SIMILAR_ENOUGH(best_similarity)) {
char *assumed = xstrdup(main_cmds.names[0]->name); char *assumed = xstrdup(main_cmds.names[0]->name);
fprintf_ln(stderr, fprintf_ln(stderr,

View File

@ -28,15 +28,18 @@ test_expect_success 'setup' '
test_cmp expect actual test_cmp expect actual
' '
test_expect_success 'autocorrect showing candidates' ' for show in false no off 0
git config help.autocorrect 0 && do
test_expect_success 'autocorrect showing candidates' '
git config help.autocorrect $show &&
test_must_fail git lfg 2>actual && test_must_fail git lfg 2>actual &&
grep "^ lgf" actual && grep "^ lgf" actual &&
test_must_fail git distimdist 2>actual && test_must_fail git distimdist 2>actual &&
grep "^ distimdistim" actual grep "^ distimdistim" actual
' '
done
for immediate in -1 immediate for immediate in -1 immediate
do do