Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- cache-tree.c | 17 +++++++++++++---- 1 files changed, 13 insertions(+), 4 deletions(-) diff --git a/cache-tree.c b/cache-tree.c index 03952c7..69ce0a2 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -616,11 +616,17 @@ int write_cache_as_tree(unsigned char *sha1, int flags, const char *prefix) return 0; } -static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree) +static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree, const char *path) { struct tree_desc desc; struct name_entry entry; - int cnt; + const char *slash; + int len = 0, cnt; + + if (path) { + slash = strchr(path, '/'); + len = slash ? slash - path : strlen(path); + } hashcpy(it->sha1, tree->object.sha1); init_tree_desc(&desc, tree->buffer, tree->size); @@ -628,6 +634,8 @@ static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree) while (tree_entry(&desc, &entry)) { if (!S_ISDIR(entry.mode)) cnt++; + else if (get_narrow_prefix() && len && strncmp(entry.path, path, len)) + cnt++; else { struct cache_tree_sub *sub; struct tree *subtree = lookup_tree(entry.sha1); @@ -635,7 +643,8 @@ static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree) parse_tree(subtree); sub = cache_tree_sub(it, entry.path); sub->cache_tree = cache_tree(); - prime_cache_tree_rec(sub->cache_tree, subtree); + prime_cache_tree_rec(sub->cache_tree, subtree, + slash ? slash+1 : NULL); cnt += sub->cache_tree->entry_count; } } @@ -646,7 +655,7 @@ void prime_cache_tree(struct cache_tree **it, struct tree *tree) { cache_tree_free(it); *it = cache_tree(); - prime_cache_tree_rec(*it, tree); + prime_cache_tree_rec(*it, tree, get_narrow_prefix()); } /* -- 1.7.1.rc1.69.g24c2f7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html