Whole directory matching */
| 1610 | |
| 1611 | /* Whole directory matching */ |
| 1612 | static 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 |
no test coverage detected