Merge branch 'ds/sparse-sparse-checkout'
"sparse-checkout" learns to work well with the sparse-index feature. * ds/sparse-sparse-checkout: sparse-checkout: integrate with sparse index p2000: add test for 'git sparse-checkout [add|set]' sparse-index: complete partial expansion sparse-index: partially expand directories sparse-checkout: --no-sparse-index needs a full index cache-tree: implement cache_tree_find_path() sparse-index: introduce partially-sparse indexes sparse-index: create expand_index() t1092: stress test 'git sparse-checkout set' t1092: refactor 'sparse-index contents' test
This commit is contained in:
27
cache-tree.c
27
cache-tree.c
@ -101,6 +101,33 @@ struct cache_tree_sub *cache_tree_sub(struct cache_tree *it, const char *path)
|
||||
return find_subtree(it, path, pathlen, 1);
|
||||
}
|
||||
|
||||
struct cache_tree *cache_tree_find_path(struct cache_tree *it, const char *path)
|
||||
{
|
||||
const char *slash;
|
||||
int namelen;
|
||||
struct cache_tree_sub it_sub = {
|
||||
.cache_tree = it,
|
||||
};
|
||||
struct cache_tree_sub *down = &it_sub;
|
||||
|
||||
while (down) {
|
||||
slash = strchrnul(path, '/');
|
||||
namelen = slash - path;
|
||||
down->cache_tree->entry_count = -1;
|
||||
if (!*slash) {
|
||||
int pos;
|
||||
pos = cache_tree_subtree_pos(down->cache_tree, path, namelen);
|
||||
if (0 <= pos)
|
||||
return down->cache_tree->down[pos]->cache_tree;
|
||||
return NULL;
|
||||
}
|
||||
down = find_subtree(it, path, namelen, 0);
|
||||
path = slash + 1;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int do_invalidate_path(struct cache_tree *it, const char *path)
|
||||
{
|
||||
/* a/b/c
|
||||
|
Reference in New Issue
Block a user