Merge branch 'nd/struct-pathspec'
* nd/struct-pathspec: (22 commits) t6004: add pathspec globbing test for log family t7810: overlapping pathspecs and depth limit grep: drop pathspec_matches() in favor of tree_entry_interesting() grep: use writable strbuf from caller for grep_tree() grep: use match_pathspec_depth() for cache/worktree grepping grep: convert to use struct pathspec Convert ce_path_match() to use match_pathspec_depth() Convert ce_path_match() to use struct pathspec struct rev_info: convert prune_data to struct pathspec pathspec: add match_pathspec_depth() tree_entry_interesting(): optimize wildcard matching when base is matched tree_entry_interesting(): support wildcard matching tree_entry_interesting(): fix depth limit with overlapping pathspecs tree_entry_interesting(): support depth limit tree_entry_interesting(): refactor into separate smaller functions diff-tree: convert base+baselen to writable strbuf glossary: define pathspec Move tree_entry_interesting() to tree-walk.c and export it tree_entry_interesting(): remove dependency on struct diff_options Convert struct diff_options to use struct pathspec ...
This commit is contained in:
25
read-cache.c
25
read-cache.c
@ -706,30 +706,9 @@ int ce_same_name(struct cache_entry *a, struct cache_entry *b)
|
||||
return ce_namelen(b) == len && !memcmp(a->name, b->name, len);
|
||||
}
|
||||
|
||||
int ce_path_match(const struct cache_entry *ce, const char **pathspec)
|
||||
int ce_path_match(const struct cache_entry *ce, const struct pathspec *pathspec)
|
||||
{
|
||||
const char *match, *name;
|
||||
int len;
|
||||
|
||||
if (!pathspec)
|
||||
return 1;
|
||||
|
||||
len = ce_namelen(ce);
|
||||
name = ce->name;
|
||||
while ((match = *pathspec++) != NULL) {
|
||||
int matchlen = strlen(match);
|
||||
if (matchlen > len)
|
||||
continue;
|
||||
if (memcmp(name, match, matchlen))
|
||||
continue;
|
||||
if (matchlen && name[matchlen-1] == '/')
|
||||
return 1;
|
||||
if (name[matchlen] == '/' || !name[matchlen])
|
||||
return 1;
|
||||
if (!matchlen)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user