path: root/setup.c
diff options
authorJunio C Hamano <>2006-04-26 22:09:27 (GMT)
committerJunio C Hamano <>2006-04-27 00:08:44 (GMT)
commitea92f41ff92b2fef54c8da4abb03c8101160a034 (patch)
tree2f2587a1b5d20bc578726637779a04e26a085f4f /setup.c
parent69bcc43eca0f251617e3b5db5df632b24db94e92 (diff)
revision parsing: make "rev -- paths" checks stronger.
If you don't have a "--" marker, then: - all of the arguments we are going to assume are pathspecs must exist in the working tree. - none of the arguments we parsed as revisions could be interpreted as a filename. so that there really isn't any possibility of confusion in case somebody does have a revision that looks like a pathname too. The former rule has been in effect; this implements the latter. Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'setup.c')
1 files changed, 22 insertions, 2 deletions
diff --git a/setup.c b/setup.c
index cce9bb8..fe7f884 100644
--- a/setup.c
+++ b/setup.c
@@ -80,11 +80,31 @@ void verify_filename(const char *prefix, const char *arg)
if (!lstat(name, &st))
if (errno == ENOENT)
- die("ambiguous argument '%s': unknown revision or filename\n"
- "Use '--' to separate filenames from revisions", arg);
+ die("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
+ "Use '--' to separate paths from revisions", arg);
die("'%s': %s", arg, strerror(errno));
+ * Opposite of the above: the command line did not have -- marker
+ * and we parsed the arg as a refname. It should not be interpretable
+ * as a filename.
+ */
+void verify_non_filename(const char *prefix, const char *arg)
+ const char *name;
+ struct stat st;
+ if (*arg == '-')
+ return; /* flag */
+ name = prefix ? prefix_filename(prefix, strlen(prefix), arg) : arg;
+ if (!lstat(name, &st))
+ die("ambiguous argument '%s': both revision and filename\n"
+ "Use '--' to separate filenames from revisions", arg);
+ if (errno != ENOENT)
+ die("'%s': %s", arg, strerror(errno));
const char **get_pathspec(const char *prefix, const char **pathspec)
const char *entry = *pathspec;