Merge branch 'mt/add-rm-in-sparse-checkout'

"git add" and "git rm" learned not to touch those paths that are
outside of sparse checkout.

* mt/add-rm-in-sparse-checkout:
  rm: honor sparse checkout patterns
  add: warn when asked to update SKIP_WORKTREE entries
  refresh_index(): add flag to ignore SKIP_WORKTREE entries
  pathspec: allow to ignore SKIP_WORKTREE entries on index matching
  add: make --chmod and --renormalize honor sparse checkouts
  t3705: add tests for `git add` in sparse checkouts
  add: include magic part of pathspec on --refresh error
This commit is contained in:
Junio C Hamano
2021-05-07 12:47:39 +09:00
16 changed files with 408 additions and 63 deletions

View File

@ -21,7 +21,8 @@
*/
void add_pathspec_matches_against_index(const struct pathspec *pathspec,
struct index_state *istate,
char *seen)
char *seen,
enum ps_skip_worktree_action sw_action)
{
int num_unmatched = 0, i;
@ -40,6 +41,8 @@ void add_pathspec_matches_against_index(const struct pathspec *pathspec,
ensure_full_index(istate);
for (i = 0; i < istate->cache_nr; i++) {
const struct cache_entry *ce = istate->cache[i];
if (sw_action == PS_IGNORE_SKIP_WORKTREE && ce_skip_worktree(ce))
continue;
ce_path_match(istate, ce, pathspec, seen);
}
}
@ -53,10 +56,26 @@ 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,
struct index_state *istate)
struct index_state *istate,
enum ps_skip_worktree_action sw_action)
{
char *seen = xcalloc(pathspec->nr, 1);
add_pathspec_matches_against_index(pathspec, istate, seen);
add_pathspec_matches_against_index(pathspec, istate, seen, sw_action);
return seen;
}
char *find_pathspecs_matching_skip_worktree(const struct pathspec *pathspec)
{
struct index_state *istate = the_repository->index;
char *seen = xcalloc(pathspec->nr, 1);
int i;
for (i = 0; i < istate->cache_nr; i++) {
struct cache_entry *ce = istate->cache[i];
if (ce_skip_worktree(ce))
ce_path_match(istate, ce, pathspec, seen);
}
return seen;
}