MCPcopy Create free account
hub / github.com/git/git / clear_ce_flags_dir

Function clear_ce_flags_dir

unpack-trees.c:1612–1662  ·  view source on GitHub ↗

Whole directory matching */

Source from the content-addressed store, hash-verified

1610
1611/* Whole directory matching */
1612static int clear_ce_flags_dir(struct index_state *istate,
1613 struct cache_entry **cache, int nr,
1614 struct strbuf *prefix,
1615 char *basename,
1616 int select_mask, int clear_mask,
1617 struct pattern_list *pl,
1618 enum pattern_match_result default_match,
1619 int progress_nr)
1620{
1621 struct cache_entry **cache_end;
1622 int dtype = DT_DIR;
1623 int rc;
1624 enum pattern_match_result ret, orig_ret;
1625 orig_ret = path_matches_pattern_list(prefix->buf, prefix->len,
1626 basename, &dtype, pl, istate);
1627
1628 strbuf_addch(prefix, '/');
1629
1630 /* If undecided, use matching result of parent dir in defval */
1631 if (orig_ret == UNDECIDED)
1632 ret = default_match;
1633 else
1634 ret = orig_ret;
1635
1636 for (cache_end = cache; cache_end != cache + nr; cache_end++) {
1637 struct cache_entry *ce = *cache_end;
1638 if (strncmp(ce->name, prefix->buf, prefix->len))
1639 break;
1640 }
1641
1642 if (pl->use_cone_patterns && orig_ret == MATCHED_RECURSIVE) {
1643 struct cache_entry **ce = cache;
1644 rc = cache_end - cache;
1645
1646 while (ce < cache_end) {
1647 (*ce)->ce_flags &= ~clear_mask;
1648 ce++;
1649 }
1650 } else if (pl->use_cone_patterns && orig_ret == NOT_MATCHED) {
1651 rc = cache_end - cache;
1652 } else {
1653 rc = clear_ce_flags_1(istate, cache, cache_end - cache,
1654 prefix,
1655 select_mask, clear_mask,
1656 pl, ret,
1657 progress_nr);
1658 }
1659
1660 strbuf_setlen(prefix, prefix->len - 1);
1661 return rc;
1662}
1663
1664/*
1665 * Traverse the index, find every entry that matches according to

Callers 1

clear_ce_flags_1Function · 0.85

Calls 4

strbuf_addchFunction · 0.85
clear_ce_flags_1Function · 0.85
strbuf_setlenFunction · 0.85

Tested by

no test coverage detected