aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@osdl.org>2006-03-26 16:28:20 -0800
committerJunio C Hamano <junkio@cox.net>2006-03-26 19:06:17 -0800
commitfb18a2edf7f3d1585b6330b7dde110b992d3b97c (patch)
treeda2f0dfbeba9118205ab90ae6057952e0dae32c8
parentbe1295d16a2593dcf468fef7d9e811d057d9039f (diff)
downloadgit-fb18a2edf7f3d1585b6330b7dde110b992d3b97c.tar.gz
git-fb18a2edf7f3d1585b6330b7dde110b992d3b97c.tar.xz
Fix error handling for nonexistent names
When passing in a pathname pattern without the "--" separator on the command line, we verify that the pathnames in question exist. However, there were two bugs in that verification: - git-rev-parse would only check the first pathname, and silently allow any invalid subsequent pathname, whether it existed or not (which defeats the purpose of the check, and is also inconsistent with what git-rev-list actually does) - git-rev-list (and "git log" etc) would check each filename, but if the check failed, it would print the error using the first one, i.e.: [torvalds@g5 git]$ git log Makefile bad-file fatal: 'Makefile': No such file or directory instead of saying that it's 'bad-file' that doesn't exist. This fixes both bugs. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--rev-parse.c8
-rw-r--r--revision.c2
2 files changed, 6 insertions, 4 deletions
diff --git a/rev-parse.c b/rev-parse.c
index 19a5ef7f4..f176c56f7 100644
--- a/rev-parse.c
+++ b/rev-parse.c
@@ -172,9 +172,11 @@ int main(int argc, char **argv)
struct stat st;
char *arg = argv[i];
char *dotdot;
-
+
if (as_is) {
- show_file(arg);
+ if (show_file(arg) && as_is < 2)
+ if (lstat(arg, &st) < 0)
+ die("'%s': %s", arg, strerror(errno));
continue;
}
if (!strcmp(arg,"-n")) {
@@ -194,7 +196,7 @@ int main(int argc, char **argv)
if (*arg == '-') {
if (!strcmp(arg, "--")) {
- as_is = 1;
+ as_is = 2;
/* Pass on the "--" if we show anything but files.. */
if (filter & (DO_FLAGS | DO_REVS))
show_file(arg);
diff --git a/revision.c b/revision.c
index 12cd0529a..d67718c75 100644
--- a/revision.c
+++ b/revision.c
@@ -649,7 +649,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
/* If we didn't have a "--", all filenames must exist */
for (j = i; j < argc; j++) {
if (lstat(argv[j], &st) < 0)
- die("'%s': %s", arg, strerror(errno));
+ die("'%s': %s", argv[j], strerror(errno));
}
revs->prune_data = get_pathspec(revs->prefix, argv + i);
break;