[PATCH] cache-tree: populate cache-tree on successful merge
From: David Turner <hidden>
Date: 2016-06-15 23:05:55
Subsystem:
the rest · Maintainer:
Linus Torvalds
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: David Turner <redacted> Signed-off-by: Brian Degenhardt <redacted> --- This patch is by my colleague, Brian Degenhardt (as part of his work on git at Twitter). I'm sending it with his and Twitter's approval. --- t/t0090-cache-tree.sh | 24 ++++++++++++++++++++++++ unpack-trees.c | 7 +++++++ 2 files changed, 31 insertions(+)
diff --git a/t/t0090-cache-tree.sh b/t/t0090-cache-tree.sh
index 601d02d..055cc19 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 2927660..befc247 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c@@ -1156,6 +1156,13 @@ 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 (!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 {
--
2.0.4.315.gad8727a-twtrsrc