Skip to content

Commit

Permalink
dir.c: prepare match_pathspec_item for taking more flags
Browse files Browse the repository at this point in the history
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Nguyễn Thái Ngọc Duy authored and Junio C Hamano committed Feb 24, 2014
1 parent 854b095 commit 42b0874
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@ int within_depth(const char *name, int namelen,
return 1;
}

#define DO_MATCH_EXCLUDE 1

/*
* Does 'match' match the given name?
* A match is found if
Expand All @@ -208,7 +210,7 @@ int within_depth(const char *name, int namelen,
* It returns 0 when there is no match.
*/
static int match_pathspec_item(const struct pathspec_item *item, int prefix,
const char *name, int namelen)
const char *name, int namelen, unsigned flags)
{
/* name/namelen has prefix cut off by caller */
const char *match = item->match + prefix;
Expand Down Expand Up @@ -285,9 +287,9 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix,
static int do_match_pathspec(const struct pathspec *ps,
const char *name, int namelen,
int prefix, char *seen,
int exclude)
unsigned flags)
{
int i, retval = 0;
int i, retval = 0, exclude = flags & DO_MATCH_EXCLUDE;

GUARD_PATHSPEC(ps,
PATHSPEC_FROMTOP |
Expand Down Expand Up @@ -327,7 +329,8 @@ static int do_match_pathspec(const struct pathspec *ps,
*/
if (seen && ps->items[i].magic & PATHSPEC_EXCLUDE)
seen[i] = MATCHED_FNMATCH;
how = match_pathspec_item(ps->items+i, prefix, name, namelen);
how = match_pathspec_item(ps->items+i, prefix, name,
namelen, flags);
if (ps->recursive &&
(ps->magic & PATHSPEC_MAXDEPTH) &&
ps->max_depth != -1 &&
Expand Down Expand Up @@ -355,10 +358,14 @@ int match_pathspec(const struct pathspec *ps,
int prefix, char *seen)
{
int positive, negative;
positive = do_match_pathspec(ps, name, namelen, prefix, seen, 0);
unsigned flags = 0;
positive = do_match_pathspec(ps, name, namelen,
prefix, seen, flags);
if (!(ps->magic & PATHSPEC_EXCLUDE) || !positive)
return positive;
negative = do_match_pathspec(ps, name, namelen, prefix, seen, 1);
negative = do_match_pathspec(ps, name, namelen,
prefix, seen,
flags | DO_MATCH_EXCLUDE);
return negative ? 0 : positive;
}

Expand Down

0 comments on commit 42b0874

Please sign in to comment.