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 <junkio@cox.net>
This commit is contained in:
11
cache-tree.c
11
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)
|
||||
|
Reference in New Issue
Block a user