On Tue, Feb 23, 2021 at 8:05 PM Matheus Tavares <matheus.bernardino@xxxxxx> wrote: > > Add the 'ignore_skip_worktree' boolean parameter to both > add_pathspec_matches_against_index() and > find_pathspecs_matching_against_index(). When true, these functions will > not try to match the given pathspec with SKIP_WORKTREE entries. This > will be used in a future patch to make `git add` display a hint > when the pathspec matches only sparse paths. > > Signed-off-by: Matheus Tavares <matheus.bernardino@xxxxxx> > --- > builtin/add.c | 4 ++-- > builtin/check-ignore.c | 2 +- > pathspec.c | 10 +++++++--- > pathspec.h | 5 +++-- > 4 files changed, 13 insertions(+), 8 deletions(-) > > diff --git a/builtin/add.c b/builtin/add.c > index 5fec21a792..e15b25a623 100644 > --- a/builtin/add.c > +++ b/builtin/add.c > @@ -177,7 +177,7 @@ static char *prune_directory(struct dir_struct *dir, struct pathspec *pathspec, > *dst++ = entry; > } > dir->nr = dst - dir->entries; > - add_pathspec_matches_against_index(pathspec, &the_index, seen); > + add_pathspec_matches_against_index(pathspec, &the_index, seen, 0); One thing to consider here is something Stolee has suggested to me multiple times -- introducing an enum with self-documenting values. For example: enum ignore_skip_worktree_values { HEED_SKIP_WORKTREE = 0, IGNORE_SKIP_WORKTREE = 1 }; This would allow all the function callers to pass HEED_SKIP_WORKTREE instead of a bare 0, and allows code readers to avoid looking up function signatures to find the meaning behind the 0. It's a minor point, though. > return seen; > } > > @@ -578,7 +578,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) > int i; > > if (!seen) > - seen = find_pathspecs_matching_against_index(&pathspec, &the_index); > + seen = find_pathspecs_matching_against_index(&pathspec, &the_index, 0); > > /* > * file_exists() assumes exact match > diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c > index 3c652748d5..235b7fc905 100644 > --- a/builtin/check-ignore.c > +++ b/builtin/check-ignore.c > @@ -100,7 +100,7 @@ static int check_ignore(struct dir_struct *dir, > * should not be ignored, in order to be consistent with > * 'git status', 'git add' etc. > */ > - seen = find_pathspecs_matching_against_index(&pathspec, &the_index); > + seen = find_pathspecs_matching_against_index(&pathspec, &the_index, 0); > for (i = 0; i < pathspec.nr; i++) { > full_path = pathspec.items[i].match; > pattern = NULL; > diff --git a/pathspec.c b/pathspec.c > index 7a229d8d22..e5e6b7458d 100644 > --- a/pathspec.c > +++ b/pathspec.c > @@ -21,7 +21,7 @@ > */ > void add_pathspec_matches_against_index(const struct pathspec *pathspec, > const struct index_state *istate, > - char *seen) > + char *seen, int ignore_skip_worktree) > { > int num_unmatched = 0, i; > > @@ -38,6 +38,8 @@ void add_pathspec_matches_against_index(const struct pathspec *pathspec, > return; > for (i = 0; i < istate->cache_nr; i++) { > const struct cache_entry *ce = istate->cache[i]; > + if (ignore_skip_worktree && ce_skip_worktree(ce)) > + continue; > ce_path_match(istate, ce, pathspec, seen); > } > } > @@ -51,10 +53,12 @@ void add_pathspec_matches_against_index(const struct pathspec *pathspec, > * given pathspecs achieves against all items in the index. > */ > char *find_pathspecs_matching_against_index(const struct pathspec *pathspec, > - const struct index_state *istate) > + const struct index_state *istate, > + int ignore_skip_worktree) > { > char *seen = xcalloc(pathspec->nr, 1); > - add_pathspec_matches_against_index(pathspec, istate, seen); > + add_pathspec_matches_against_index(pathspec, istate, seen, > + ignore_skip_worktree); > return seen; > } > > diff --git a/pathspec.h b/pathspec.h > index 454ce364fa..8202882ecd 100644 > --- a/pathspec.h > +++ b/pathspec.h > @@ -151,9 +151,10 @@ static inline int ps_strcmp(const struct pathspec_item *item, > > void add_pathspec_matches_against_index(const struct pathspec *pathspec, > const struct index_state *istate, > - char *seen); > + char *seen, int ignore_skip_worktree); > char *find_pathspecs_matching_against_index(const struct pathspec *pathspec, > - const struct index_state *istate); > + const struct index_state *istate, > + int ignore_skip_worktree); > int match_pathspec_attrs(const struct index_state *istate, > const char *name, int namelen, > const struct pathspec_item *item); > -- > 2.30.1 Looks good.