summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tree.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/tree.c b/src/tree.c
index adc6fe5e4..6b06dfd77 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -579,6 +579,7 @@ int git_tree__write_index(
git_oid *oid, git_index *index, git_repository *repo)
{
int ret;
+ git_tree *tree;
bool old_ignore_case = false;
assert(oid && index && repo);
@@ -609,7 +610,21 @@ int git_tree__write_index(
if (old_ignore_case)
git_index__set_ignore_case(index, true);
- return ret < 0 ? ret : 0;
+ index->tree = NULL;
+
+ if (ret < 0)
+ return ret;
+
+ git_pool_clear(&index->tree_pool);
+
+ if ((ret = git_tree_lookup(&tree, repo, oid)) < 0)
+ return ret;
+
+ /* Read the tree cache into the index */
+ ret = git_tree_cache_read_tree(&index->tree, tree, &index->tree_pool);
+ git_tree_free(tree);
+
+ return ret;
}
int git_treebuilder_create(git_treebuilder **builder_p, const git_tree *source)