summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@github.com>2016-11-14 12:12:38 +0000
committerGitHub <noreply@github.com>2016-11-14 12:12:38 +0000
commitdf045cef68ef89d5c3221beeb0ca7d30c0ddcca8 (patch)
treead96e6e83cfd8287f1c185dae60fb80196abd0db /src
parent904e1e75f9a1d5696737ff55a68021997a8c3cce (diff)
parent8977658519835805af5327e51f5a84354417839d (diff)
downloadlibgit2-df045cef68ef89d5c3221beeb0ca7d30c0ddcca8.tar.gz
Merge pull request #4003 from libgit2/cmn/tree-updater-ordering
Use the sorted input in the tree updater
Diffstat (limited to 'src')
-rw-r--r--src/tree.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/tree.c b/src/tree.c
index e338acca0..9655ad739 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -1164,8 +1164,8 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
goto cleanup;
for (i = 0; i < nupdates; i++) {
- const git_tree_update *last_update = i == 0 ? NULL : &updates[i-1];
- const git_tree_update *update = &updates[i];
+ const git_tree_update *last_update = i == 0 ? NULL : git_vector_get(&entries, i-1);
+ const git_tree_update *update = git_vector_get(&entries, i);
size_t common_prefix = 0, steps_up, j;
const char *path;
@@ -1200,6 +1200,9 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
last = git_array_last(stack);
entry = last->tree ? git_tree_entry_byname(last->tree, component.ptr) : NULL;
+ if (!entry)
+ entry = treebuilder_get(last->bld, component.ptr);
+
if (entry && git_tree_entry_type(entry) != GIT_OBJ_TREE) {
giterr_set(GITERR_TREE, "D/F conflict when updating tree");
error = -1;