rev-parse: better error message for ambiguous arguments
Currently, if git-rev-parse encounters an argument that is neither a recognizable revision name nor the name of an existing file or directory, and it hasn't encountered a "--" argument, it prints an error message saying "No such file or directory". This can be confusing for users, including users of programs such as gitk that use git-rev-parse, who may then think that they can't ask about the history of files that no longer exist. This makes it print a better error message, one that points out the ambiguity and tells the user what to do to fix it. Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:

committed by
Junio C Hamano

parent
34fd1c9ac5
commit
3e1a70d925
12
rev-parse.c
12
rev-parse.c
@ -160,6 +160,14 @@ static int show_file(const char *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void die_badfile(const char *arg)
|
||||||
|
{
|
||||||
|
if (errno != ENOENT)
|
||||||
|
die("'%s': %s", arg, strerror(errno));
|
||||||
|
die("'%s' is ambiguous - revision name or file/directory name?\n"
|
||||||
|
"Please put '--' before the list of filenames.", arg);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i, as_is = 0, verify = 0;
|
int i, as_is = 0, verify = 0;
|
||||||
@ -176,7 +184,7 @@ int main(int argc, char **argv)
|
|||||||
if (as_is) {
|
if (as_is) {
|
||||||
if (show_file(arg) && as_is < 2)
|
if (show_file(arg) && as_is < 2)
|
||||||
if (lstat(arg, &st) < 0)
|
if (lstat(arg, &st) < 0)
|
||||||
die("'%s': %s", arg, strerror(errno));
|
die_badfile(arg);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(arg,"-n")) {
|
if (!strcmp(arg,"-n")) {
|
||||||
@ -343,7 +351,7 @@ int main(int argc, char **argv)
|
|||||||
if (verify)
|
if (verify)
|
||||||
die("Needed a single revision");
|
die("Needed a single revision");
|
||||||
if (lstat(arg, &st) < 0)
|
if (lstat(arg, &st) < 0)
|
||||||
die("'%s': %s", arg, strerror(errno));
|
die_badfile(arg);
|
||||||
}
|
}
|
||||||
show_default();
|
show_default();
|
||||||
if (verify && revs_count != 1)
|
if (verify && revs_count != 1)
|
||||||
|
Reference in New Issue
Block a user