summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <junkio@cox.net>2006-04-27 12:51:08 -0700
committerLibravatar Junio C Hamano <junkio@cox.net>2006-04-27 12:51:08 -0700
commitc9a11205f73d7d39aab8b70169d73948d4a9f04f (patch)
tree0c8628c034b9ca4eff6fd093d0e6fc18fc225962 /setup.c
parentFix mismerged update-index from jc/cache-tree branch. (diff)
parentrevision parsing: make "rev -- paths" checks stronger. (diff)
downloadtgif-c9a11205f73d7d39aab8b70169d73948d4a9f04f.tar.xz
Merge branch 'jc/pathcheck' into next
* jc/pathcheck: revision parsing: make "rev -- paths" checks stronger.
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/setup.c b/setup.c
index cce9bb8069..fe7f884696 100644
--- a/setup.c
+++ b/setup.c
@@ -80,11 +80,31 @@ void verify_filename(const char *prefix, const char *arg)
if (!lstat(name, &st))
return;
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;