Skip to content

Commit

Permalink
unpack-trees: populate cache-tree on successful merge
Browse files Browse the repository at this point in the history
When we unpack trees into an existing index, we discard the old
index and replace it with the new, merged index.  Ensure that this
index has its cache-tree populated.  This will make subsequent git
status and commit commands faster.

Signed-off-by: Brian Degenhardt <bmd@bmdhacks.com>
Signed-off-by: David Turner <dturner@twopensource.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Brian Degenhardt authored and Junio C Hamano committed Jul 28, 2015
1 parent 9a3d637 commit 52fca21
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
24 changes: 24 additions & 0 deletions t/t0090-cache-tree.sh
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,30 @@ test_expect_success 'checkout -B gives cache-tree' '
test_cache_tree
'

test_expect_success 'merge --ff-only maintains cache-tree' '
git checkout current &&
git checkout -b changes &&
test_commit llamas &&
test_commit pachyderm &&
test_cache_tree &&
git checkout current &&
test_cache_tree &&
git merge --ff-only changes &&
test_cache_tree
'

test_expect_success 'merge maintains cache-tree' '
git checkout current &&
git checkout -b changes2 &&
test_commit alpacas &&
test_cache_tree &&
git checkout current &&
test_commit struthio &&
test_cache_tree &&
git merge changes2 &&
test_cache_tree
'

test_expect_success 'partial commit gives cache-tree' '
git checkout -b partial no-children &&
test_commit one &&
Expand Down
8 changes: 8 additions & 0 deletions unpack-trees.c
Original file line number Diff line number Diff line change
Expand Up @@ -1155,6 +1155,14 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
o->src_index = NULL;
ret = check_updates(o) ? (-2) : 0;
if (o->dst_index) {
if (!ret) {
if (!o->result.cache_tree)
o->result.cache_tree = cache_tree();
if (!cache_tree_fully_valid(o->result.cache_tree))
cache_tree_update(&o->result,
WRITE_TREE_SILENT |
WRITE_TREE_REPAIR);
}
discard_index(o->dst_index);
*o->dst_index = o->result;
} else {
Expand Down

0 comments on commit 52fca21

Please sign in to comment.