From 52fca2184df8398f0ba212cd6a0ec1fb123b7473 Mon Sep 17 00:00:00 2001 From: Brian Degenhardt Date: Tue, 28 Jul 2015 15:30:40 -0400 Subject: unpack-trees: populate cache-tree on successful merge 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 Signed-off-by: David Turner Signed-off-by: Junio C Hamano --- t/t0090-cache-tree.sh | 24 ++++++++++++++++++++++++ unpack-trees.c | 8 ++++++++ 2 files changed, 32 insertions(+) diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh index 601d02d71..055cc1900 100755 --- a/t/t0090-cache-tree.sh +++ b/t/t0090-cache-tree.sh @@ -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 && diff --git a/unpack-trees.c b/unpack-trees.c index be84ba260..d92f90340 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -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 { -- cgit v1.2.1