pathspec: remove the deprecated get_pathspec function
Now that all callers of the old 'get_pathspec' interface have been migrated to use the new pathspec struct interface it can be removed from the codebase. Since there are no more users of the '_raw' field in the pathspec struct it can also be removed. This patch also removes the old functionality of modifying the const char **argv array that was passed into parse_pathspec. Instead the constructed 'match' string (which is a pathspec element with the prefix prepended) is only stored in its corresponding pathspec_item entry. Signed-off-by: Brandon Williams <bmwill@google.com> Reviewed-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
e1e24edc1a
commit
34305f7753
@ -27,8 +27,6 @@ parse_pathspec(). This function takes several arguments:
|
|||||||
|
|
||||||
- prefix and args come from cmd_* functions
|
- prefix and args come from cmd_* functions
|
||||||
|
|
||||||
get_pathspec() is obsolete and should never be used in new code.
|
|
||||||
|
|
||||||
parse_pathspec() helps catch unsupported features and reject them
|
parse_pathspec() helps catch unsupported features and reject them
|
||||||
politely. At a lower level, different pathspec-related functions may
|
politely. At a lower level, different pathspec-related functions may
|
||||||
not support the same set of features. Such pathspec-sensitive
|
not support the same set of features. Such pathspec-sensitive
|
||||||
|
1
cache.h
1
cache.h
@ -514,7 +514,6 @@ extern void set_git_work_tree(const char *tree);
|
|||||||
|
|
||||||
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
|
#define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
|
||||||
|
|
||||||
extern const char **get_pathspec(const char *prefix, const char **pathspec);
|
|
||||||
extern void setup_work_tree(void);
|
extern void setup_work_tree(void);
|
||||||
extern const char *setup_git_directory_gently(int *);
|
extern const char *setup_git_directory_gently(int *);
|
||||||
extern const char *setup_git_directory(void);
|
extern const char *setup_git_directory(void);
|
||||||
|
42
pathspec.c
42
pathspec.c
@ -103,7 +103,7 @@ static void prefix_short_magic(struct strbuf *sb, int prefixlen,
|
|||||||
*/
|
*/
|
||||||
static unsigned prefix_pathspec(struct pathspec_item *item,
|
static unsigned prefix_pathspec(struct pathspec_item *item,
|
||||||
unsigned *p_short_magic,
|
unsigned *p_short_magic,
|
||||||
const char **raw, unsigned flags,
|
unsigned flags,
|
||||||
const char *prefix, int prefixlen,
|
const char *prefix, int prefixlen,
|
||||||
const char *elt)
|
const char *elt)
|
||||||
{
|
{
|
||||||
@ -240,7 +240,7 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
|
|||||||
if (!match)
|
if (!match)
|
||||||
die(_("%s: '%s' is outside repository"), elt, copyfrom);
|
die(_("%s: '%s' is outside repository"), elt, copyfrom);
|
||||||
}
|
}
|
||||||
*raw = item->match = match;
|
item->match = match;
|
||||||
/*
|
/*
|
||||||
* Prefix the pathspec (keep all magic) and assign to
|
* Prefix the pathspec (keep all magic) and assign to
|
||||||
* original. Useful for passing to another command.
|
* original. Useful for passing to another command.
|
||||||
@ -381,8 +381,6 @@ void parse_pathspec(struct pathspec *pathspec,
|
|||||||
|
|
||||||
/* No arguments with prefix -> prefix pathspec */
|
/* No arguments with prefix -> prefix pathspec */
|
||||||
if (!entry) {
|
if (!entry) {
|
||||||
static const char *raw[2];
|
|
||||||
|
|
||||||
if (flags & PATHSPEC_PREFER_FULL)
|
if (flags & PATHSPEC_PREFER_FULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -394,10 +392,7 @@ void parse_pathspec(struct pathspec *pathspec,
|
|||||||
item->original = prefix;
|
item->original = prefix;
|
||||||
item->nowildcard_len = item->len = strlen(prefix);
|
item->nowildcard_len = item->len = strlen(prefix);
|
||||||
item->prefix = item->len;
|
item->prefix = item->len;
|
||||||
raw[0] = prefix;
|
|
||||||
raw[1] = NULL;
|
|
||||||
pathspec->nr = 1;
|
pathspec->nr = 1;
|
||||||
pathspec->_raw = raw;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -415,7 +410,6 @@ void parse_pathspec(struct pathspec *pathspec,
|
|||||||
pathspec->nr = n;
|
pathspec->nr = n;
|
||||||
ALLOC_ARRAY(pathspec->items, n);
|
ALLOC_ARRAY(pathspec->items, n);
|
||||||
item = pathspec->items;
|
item = pathspec->items;
|
||||||
pathspec->_raw = argv;
|
|
||||||
prefixlen = prefix ? strlen(prefix) : 0;
|
prefixlen = prefix ? strlen(prefix) : 0;
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
@ -423,7 +417,7 @@ void parse_pathspec(struct pathspec *pathspec,
|
|||||||
entry = argv[i];
|
entry = argv[i];
|
||||||
|
|
||||||
item[i].magic = prefix_pathspec(item + i, &short_magic,
|
item[i].magic = prefix_pathspec(item + i, &short_magic,
|
||||||
argv + i, flags,
|
flags,
|
||||||
prefix, prefixlen, entry);
|
prefix, prefixlen, entry);
|
||||||
if ((flags & PATHSPEC_LITERAL_PATH) &&
|
if ((flags & PATHSPEC_LITERAL_PATH) &&
|
||||||
!(magic_mask & PATHSPEC_LITERAL))
|
!(magic_mask & PATHSPEC_LITERAL))
|
||||||
@ -457,36 +451,6 @@ void parse_pathspec(struct pathspec *pathspec,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* N.B. get_pathspec() is deprecated in favor of the "struct pathspec"
|
|
||||||
* based interface - see pathspec.c:parse_pathspec().
|
|
||||||
*
|
|
||||||
* Arguments:
|
|
||||||
* - prefix - a path relative to the root of the working tree
|
|
||||||
* - pathspec - a list of paths underneath the prefix path
|
|
||||||
*
|
|
||||||
* Iterates over pathspec, prepending each path with prefix,
|
|
||||||
* and return the resulting list.
|
|
||||||
*
|
|
||||||
* If pathspec is empty, return a singleton list containing prefix.
|
|
||||||
*
|
|
||||||
* If pathspec and prefix are both empty, return an empty list.
|
|
||||||
*
|
|
||||||
* This is typically used by built-in commands such as add.c, in order
|
|
||||||
* to normalize argv arguments provided to the built-in into a list of
|
|
||||||
* paths to process, all relative to the root of the working tree.
|
|
||||||
*/
|
|
||||||
const char **get_pathspec(const char *prefix, const char **pathspec)
|
|
||||||
{
|
|
||||||
struct pathspec ps;
|
|
||||||
parse_pathspec(&ps,
|
|
||||||
PATHSPEC_ALL_MAGIC &
|
|
||||||
~(PATHSPEC_FROMTOP | PATHSPEC_LITERAL),
|
|
||||||
PATHSPEC_PREFER_CWD,
|
|
||||||
prefix, pathspec);
|
|
||||||
return ps._raw;
|
|
||||||
}
|
|
||||||
|
|
||||||
void copy_pathspec(struct pathspec *dst, const struct pathspec *src)
|
void copy_pathspec(struct pathspec *dst, const struct pathspec *src)
|
||||||
{
|
{
|
||||||
*dst = *src;
|
*dst = *src;
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
#define PATHSPEC_ONESTAR 1 /* the pathspec pattern satisfies GFNM_ONESTAR */
|
#define PATHSPEC_ONESTAR 1 /* the pathspec pattern satisfies GFNM_ONESTAR */
|
||||||
|
|
||||||
struct pathspec {
|
struct pathspec {
|
||||||
const char **_raw; /* get_pathspec() result, not freed by clear_pathspec() */
|
|
||||||
int nr;
|
int nr;
|
||||||
unsigned int has_wildcard:1;
|
unsigned int has_wildcard:1;
|
||||||
unsigned int recursive:1;
|
unsigned int recursive:1;
|
||||||
|
Reference in New Issue
Block a user