path: root/cache-tree.c
diff options
authorJunio C Hamano <>2006-04-27 08:33:07 (GMT)
committerJunio C Hamano <>2006-04-27 08:33:07 (GMT)
commit7927a55d5bde25702dca4fb1a7d6eb7ef61110ba (patch)
treeed3c465e99f20045c9e5e85d4123e2820a097066 /cache-tree.c
parentb34c39cf31e370dad3bcfba29ee8cd023c40fd6b (diff)
read-tree: teach 1-way merege and plain read to prime cache-tree.
This teaches read-tree to fully populate valid cache-tree when reading a tree from scratch, or reading a single tree into an existing index, reusing only the cached stat information (i.e. one-way merge). We have already taught update-index about cache-tree, so "git checkout" followed by updates to a few path followed by a "git commit" would become very efficient. Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'cache-tree.c')
1 files changed, 8 insertions, 3 deletions
diff --git a/cache-tree.c b/cache-tree.c
index d8438d6..35740b3 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -91,6 +91,12 @@ static struct cache_tree_sub *find_subtree(struct cache_tree *it,
return down;
+struct cache_tree_sub *cache_tree_sub(struct cache_tree *it, const char *path)
+ int pathlen = strlen(path);
+ return find_subtree(it, path, pathlen, 1);
void cache_tree_invalidate_path(struct cache_tree *it, const char *path)
/* a/b/c
@@ -476,12 +482,11 @@ static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)
struct cache_tree *sub;
struct cache_tree_sub *subtree;
const char *name = buf;
- int namelen;
sub = read_one(&buf, &size);
if (!sub)
goto free_return;
- namelen = strlen(name);
- subtree = find_subtree(it, name, namelen, 1);
+ subtree = cache_tree_sub(it, name);
subtree->cache_tree = sub;
if (subtree_nr != it->subtree_nr)