summaryrefslogtreecommitdiff
path: root/pathspec.c
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2013-07-14 15:35:30 +0700
committerJunio C Hamano <gitster@pobox.com>2013-07-15 10:56:06 -0700
commitfc12261fea778cabd08dec707169cb88ecdbc647 (patch)
treecb9b424efb323cf5ed8c13bccad70c9a333ed35c /pathspec.c
parentd2ce1331953e9f4306e00f5edf3a6ce6e3330e9e (diff)
downloadgit-fc12261fea778cabd08dec707169cb88ecdbc647.tar.gz
parse_pathspec: add PATHSPEC_PREFER_{CWD,FULL} flags
We have two ways of dealing with empty pathspec: 1. limit it to current prefix 2. match the entire working directory Some commands go with #1, some #2. get_pathspec() and parse_pathspec() only support #1. Make parse_pathspec() reject empty pathspec by default. #1 and #2 can be specified via new flags. This makes it more expressive about default behavior at command level. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pathspec.c')
-rw-r--r--pathspec.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/pathspec.c b/pathspec.c
index f94beb6075..6d99a3dced 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -271,10 +271,20 @@ void parse_pathspec(struct pathspec *pathspec,
if (!entry && !prefix)
return;
+ if ((flags & PATHSPEC_PREFER_CWD) &&
+ (flags & PATHSPEC_PREFER_FULL))
+ die("BUG: PATHSPEC_PREFER_CWD and PATHSPEC_PREFER_FULL are incompatible");
+
/* No arguments with prefix -> prefix pathspec */
if (!entry) {
static const char *raw[2];
+ if (flags & PATHSPEC_PREFER_FULL)
+ return;
+
+ if (!(flags & PATHSPEC_PREFER_CWD))
+ die("BUG: PATHSPEC_PREFER_CWD requires arguments");
+
pathspec->items = item = xmalloc(sizeof(*item));
memset(item, 0, sizeof(*item));
item->match = prefix;
@@ -340,7 +350,8 @@ const char **get_pathspec(const char *prefix, const char **pathspec)
struct pathspec ps;
parse_pathspec(&ps,
PATHSPEC_ALL_MAGIC & ~PATHSPEC_FROMTOP,
- 0, prefix, pathspec);
+ PATHSPEC_PREFER_CWD,
+ prefix, pathspec);
return ps.raw;
}