diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2013-07-14 15:35:30 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-07-15 10:56:06 -0700 |
commit | fc12261fea778cabd08dec707169cb88ecdbc647 (patch) | |
tree | cb9b424efb323cf5ed8c13bccad70c9a333ed35c | |
parent | d2ce1331953e9f4306e00f5edf3a6ce6e3330e9e (diff) | |
download | git-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>
-rw-r--r-- | pathspec.c | 13 | ||||
-rw-r--r-- | pathspec.h | 4 |
2 files changed, 16 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; } diff --git a/pathspec.h b/pathspec.h index cc5841b77f..d630e8b1f9 100644 --- a/pathspec.h +++ b/pathspec.h @@ -24,6 +24,10 @@ struct pathspec { } *items; }; +/* parse_pathspec flags */ +#define PATHSPEC_PREFER_CWD (1<<0) /* No args means match cwd */ +#define PATHSPEC_PREFER_FULL (1<<1) /* No args means match everything */ + extern int init_pathspec(struct pathspec *, const char **); extern void parse_pathspec(struct pathspec *pathspec, unsigned magic_mask, |