[PATCH v1 08/45] parse_pathspec: add PATHSPEC_PREFER_{CWD,FULL}
From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 22:56:24
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- pathspec.c | 13 ++++++++++++- pathspec.h | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/pathspec.c b/pathspec.c
index 2bda633..6dd944a 100644
--- a/pathspec.c
+++ b/pathspec.c@@ -270,10 +270,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: parse_pathspec cannot take no arguments in this case"); + pathspec->items = item = xmalloc(sizeof(*item)); item->match = prefix; item->original = prefix;
@@ -338,7 +348,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 cc5841b..d630e8b 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,
--
1.8.0.rc0.19.g7bbb31d