Browse Source

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>
maint
Brandon Williams 8 years ago committed by Junio C Hamano
parent
commit
34305f7753
  1. 2
      Documentation/technical/api-setup.txt
  2. 1
      cache.h
  3. 42
      pathspec.c
  4. 1
      pathspec.h

2
Documentation/technical/api-setup.txt

@ -27,8 +27,6 @@ parse_pathspec(). This function takes several arguments: @@ -27,8 +27,6 @@ parse_pathspec(). This function takes several arguments:

- 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
politely. At a lower level, different pathspec-related functions may
not support the same set of features. Such pathspec-sensitive

1
cache.h

@ -514,7 +514,6 @@ extern void set_git_work_tree(const char *tree); @@ -514,7 +514,6 @@ extern void set_git_work_tree(const char *tree);

#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 const char *setup_git_directory_gently(int *);
extern const char *setup_git_directory(void);

42
pathspec.c

@ -103,7 +103,7 @@ static void prefix_short_magic(struct strbuf *sb, int prefixlen, @@ -103,7 +103,7 @@ static void prefix_short_magic(struct strbuf *sb, int prefixlen,
*/
static unsigned prefix_pathspec(struct pathspec_item *item,
unsigned *p_short_magic,
const char **raw, unsigned flags,
unsigned flags,
const char *prefix, int prefixlen,
const char *elt)
{
@ -240,7 +240,7 @@ static unsigned prefix_pathspec(struct pathspec_item *item, @@ -240,7 +240,7 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
if (!match)
die(_("%s: '%s' is outside repository"), elt, copyfrom);
}
*raw = item->match = match;
item->match = match;
/*
* Prefix the pathspec (keep all magic) and assign to
* original. Useful for passing to another command.
@ -381,8 +381,6 @@ void parse_pathspec(struct pathspec *pathspec, @@ -381,8 +381,6 @@ void parse_pathspec(struct pathspec *pathspec,

/* No arguments with prefix -> prefix pathspec */
if (!entry) {
static const char *raw[2];

if (flags & PATHSPEC_PREFER_FULL)
return;

@ -394,10 +392,7 @@ void parse_pathspec(struct pathspec *pathspec, @@ -394,10 +392,7 @@ void parse_pathspec(struct pathspec *pathspec,
item->original = prefix;
item->nowildcard_len = item->len = strlen(prefix);
item->prefix = item->len;
raw[0] = prefix;
raw[1] = NULL;
pathspec->nr = 1;
pathspec->_raw = raw;
return;
}

@ -415,7 +410,6 @@ void parse_pathspec(struct pathspec *pathspec, @@ -415,7 +410,6 @@ void parse_pathspec(struct pathspec *pathspec,
pathspec->nr = n;
ALLOC_ARRAY(pathspec->items, n);
item = pathspec->items;
pathspec->_raw = argv;
prefixlen = prefix ? strlen(prefix) : 0;

for (i = 0; i < n; i++) {
@ -423,7 +417,7 @@ void parse_pathspec(struct pathspec *pathspec, @@ -423,7 +417,7 @@ void parse_pathspec(struct pathspec *pathspec,
entry = argv[i];

item[i].magic = prefix_pathspec(item + i, &short_magic,
argv + i, flags,
flags,
prefix, prefixlen, entry);
if ((flags & PATHSPEC_LITERAL_PATH) &&
!(magic_mask & PATHSPEC_LITERAL))
@ -457,36 +451,6 @@ void parse_pathspec(struct pathspec *pathspec, @@ -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)
{
*dst = *src;

1
pathspec.h

@ -19,7 +19,6 @@ @@ -19,7 +19,6 @@
#define PATHSPEC_ONESTAR 1 /* the pathspec pattern satisfies GFNM_ONESTAR */

struct pathspec {
const char **_raw; /* get_pathspec() result, not freed by clear_pathspec() */
int nr;
unsigned int has_wildcard:1;
unsigned int recursive:1;

Loading…
Cancel
Save