Re: Doesn't disambiguate between 'external command failed' and 'command not found'
- From
- Michael Schubert <mschub@elegosoft.com>
- Date
- Jul 5, 2011, 20:41 UTC
- Message-ID
- <4E137701.1020007@elegosoft.com>
- In-Reply-To
- <1309884564.18513.12.camel@umgah>
Hi,
here is a tiny patch; maybe there is a cleaner way doing this.?
-- >8 --
Subject: [PATCH] help_unknown_cmd: do not propose an "unknown" cmd
When executing an external shell script like `git foo` with the following shebang "#!/usr/bin/not/existing", execvp returns 127 (ENOENT). Since help_unknown_cmd proposes the use of all external commands similar to the name of the "unknown" command, it suggests the just failed command again. Stop it.
Signed-off-by: Michael Schubert <mschub@elegosoft.com> --- help.c | 16 ++++++++++++++-- 1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/help.c b/help.c index 7654f1b..10b98ba 100644 --- a/help.c +++ b/help.c @@ -383,12 +383,24 @@ const char *help_unknown_cmd(const char *cmd) fprintf(stderr, "git: '%s' is not a git command. See 'git --help'.\n", cmd); - if (SIMILAR_ENOUGH(best_similarity)) { + if (n==1 && !strcmp(cmd, main_cmds.names[0]->name)) + ; + /* + * This avoids proposing the use of a command + * which apparently just didn't work, e.g. + * when executing a shell script git-foo with + * the following shebang: + * + * #!/usr/bin/not/here + * + */ + else if (SIMILAR_ENOUGH(best_similarity)) { fprintf(stderr, "\nDid you mean %s?\n", n < 2 ? "this": "one of these"); for (i = 0; i < n; i++) - fprintf(stderr, "\t%s\n", main_cmds.names[i]->name); + if (strcmp(cmd, main_cmds.names[i]->name)) + fprintf(stderr, "\t%s\n", main_cmds.names[i]->name); } exit(1);
-- 1.7.6.132.gdca5