diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-08-12 14:09:57 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-08-12 14:09:57 -0700 |
commit | 9ad8474b986b0295df6ba1455daa611a7a49a49e (patch) | |
tree | 54725ffc3ffc4e213e7e3b34a9bd44bc0c044731 | |
parent | Merge branch 'dt/reflog-tests' (diff) | |
parent | unpack-trees: populate cache-tree on successful merge (diff) | |
download | tgif-9ad8474b986b0295df6ba1455daa611a7a49a49e.tar.xz |
Merge branch 'dt/unpack-trees-cache-tree-revalidate'
The code to perform multi-tree merges has been taught to repopulate
the cache-tree upon a successful merge into the index, so that
subsequent "diff-index --cached" (hence "status") and "write-tree"
(hence "commit") will go faster.
The same logic in "git checkout" may now be removed, but that is a
separate issue.
* dt/unpack-trees-cache-tree-revalidate:
unpack-trees: populate cache-tree on successful merge
-rwxr-xr-x | t/t0090-cache-tree.sh | 24 | ||||
-rw-r--r-- | unpack-trees.c | 8 |
2 files changed, 32 insertions, 0 deletions
diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh index 601d02d71f..055cc19000 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 d6cf84904f..261804e666 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1160,6 +1160,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 { |