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

Re: [PATCH] help.autocorrect: do not run a command if the command given is junk

From
Johannes Sixt <j.sixt@viscovery.net>
Date
Dec 15, 2009, 07:57 UTC
Message-ID
<4B27415E.1090107@viscovery.net>
In-Reply-To
<7vaaxlcehw.fsf@alter.siamese.dyndns.org>
Junio C Hamano schrieb:
Show 13 quoted lines
> Johannes Sixt <j.sixt@viscovery.net> writes:
> 
>> On Montag, 14. Dezember 2009, Junio C Hamano wrote:
>>> In the meantime, I think squashing the following in would help us keep the
>>> two magic numbers in sync.
>> I do not think that keeping the numbers in sync is necessary. For example, the 
>> similarity requirement for commands that run automatically could be stricter 
>> than for the list of suggestions. Then it would be possible that a unique 
>> best candidate is not good enough to be run automatically; there would only 
>> be a list of suggestions.
> 
> Well thought out.  Would you want to reroll a patch with two symbolic
> constants then?

I briefly looked into it, but, no, I don't want to reroll the patch. Not only would the change be larger than I first thought, but I would also have to find a mis-typed command where a stricter limit makes a difference *and* where it makes sense that the guessed command is not run automatically. Moreover, I would also have to *find* a suitable new similarity limit. Not something I want to do now.

Please take my original patch and squash in your suggested changes. Here it is for your convenience with an updated commit message (only the last paragraph changed).

-- Hannes
--- 8< ---
From: Johannes Sixt <j6t@kdbg.org>
Subject: [PATCH] help.autocorrect: do not run a command if the command given is junk

If a given command is not found, then help.c tries to guess which one the user could have meant. If help.autocorrect is 0 or unset, then a list of suggestions is given as long as the dissimilarity between the given command and the candidates is not excessively high. But if help.autocorrect was non-zero (i.e., a delay after which the command is run automatically), the latter restriction on dissimilarity was not obeyed.

In my case, this happened:
 $ git ..daab02
 WARNING: You called a Git command named '..daab02', which does not exist.
 Continuing under the assumption that you meant 'read-tree'
 in 4.0 seconds automatically...

The patch reuses the similarity limit that is also applied when the list of suggested commands is printed.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
 help.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/help.c b/help.c
index e8db31f..9da97d7 100644
--- a/help.c
+++ b/help.c
@@ -297,6 +297,9 @@ static void add_cmd_list(struct cmdnames *cmds, struct cmdnames *old)
 	old->names = NULL;
 }

+/* An empirically derived magic number */
+#define SIMILAR_ENOUGH(x) ((x) < 6)
+
 const char *help_unknown_cmd(const char *cmd)
 {
 	int i, n, best_similarity = 0;
@@ -331,7 +334,7 @@ const char *help_unknown_cmd(const char *cmd)
 	n = 1;
 	while (n < main_cmds.cnt && best_similarity == main_cmds.names[n]->len)
 		++n;
-	if (autocorrect && n == 1) {
+	if (autocorrect && n == 1 && SIMILAR_ENOUGH(best_similarity)) {
 		const char *assumed = main_cmds.names[0]->name;
 		main_cmds.names[0] = NULL;
 		clean_cmdnames(&main_cmds);
@@ -349,7 +352,7 @@ const char *help_unknown_cmd(const char *cmd)

 	fprintf(stderr, "git: '%s' is not a git-command. See 'git --help'.\n", cmd);

-	if (best_similarity < 6) {
+	if (SIMILAR_ENOUGH(best_similarity)) {
 		fprintf(stderr, "\nDid you mean %s?\n",
 			n < 2 ? "this": "one of these");
-- 
1.6.6.rc1.46.g1635
Previous: Junio C Hamano
Message 11 of 11 in “help.autocorrect: do not run a command if the command given is junk”
  1. help.autocorrect: do not run a command if the command given is junkJohannes Sixt, Dec 14, 2009
  2. Alex RiesenDec 14, 2009
  3. Johannes SchindelinDec 14, 2009
  4. Johannes SchindelinDec 14, 2009
  5. Junio C HamanoDec 14, 2009
  6. Johannes SchindelinDec 14, 2009
  7. Junio C HamanoDec 14, 2009
  8. Johannes SchindelinDec 14, 2009
  9. Johannes SixtDec 14, 2009
  10. Junio C HamanoDec 14, 2009
  11. Johannes SixtDec 15, 2009

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.