diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2018-10-20 20:18:04 +0100 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2018-10-20 20:18:04 +0100 |
commit | a2f9f94bbd2ae6d3a8e7273daa16fe77803f0c99 (patch) | |
tree | 6d07942ced881cc9ccab8cd783e2a9161f847c63 | |
parent | 2ad07ad557516c47ec48732c2ae01c91c5b3034c (diff) | |
parent | 32b8166150c39f4d68b64b0483d6723dfc35bc10 (diff) | |
download | libgit2-a2f9f94bbd2ae6d3a8e7273daa16fe77803f0c99.tar.gz |
Merge branch 'issue-4203'
-rw-r--r-- | src/merge.c | 7 | ||||
-rw-r--r-- | tests/merge/workdir/simple.c | 29 |
2 files changed, 35 insertions, 1 deletions
diff --git a/src/merge.c b/src/merge.c index 068a23e20..0bc3b1248 100644 --- a/src/merge.c +++ b/src/merge.c @@ -3243,7 +3243,7 @@ int git_merge( git_reference *our_ref = NULL; git_checkout_options checkout_opts; git_annotated_commit *our_head = NULL, *base = NULL; - git_index *index = NULL; + git_index *repo_index = NULL, *index = NULL; git_indexwriter indexwriter = GIT_INDEXWRITER_INIT; unsigned int checkout_strategy; int error = 0; @@ -3266,6 +3266,10 @@ int git_merge( &checkout_strategy)) < 0) goto done; + if ((error = git_repository_index(&repo_index, repo) < 0) || + (error = git_index_read(repo_index, 0) < 0)) + goto done; + /* Write the merge setup files to the repository. */ if ((error = git_annotated_commit_from_head(&our_head, repo)) < 0 || (error = git_merge__setup(repo, our_head, their_heads, @@ -3299,6 +3303,7 @@ done: git_annotated_commit_free(our_head); git_annotated_commit_free(base); git_reference_free(our_ref); + git_index_free(repo_index); return error; } diff --git a/tests/merge/workdir/simple.c b/tests/merge/workdir/simple.c index cff1a5765..a8d5d0be0 100644 --- a/tests/merge/workdir/simple.c +++ b/tests/merge/workdir/simple.c @@ -168,6 +168,35 @@ void test_merge_workdir_simple__automerge(void) git_index_free(index); } +void test_merge_workdir_simple__index_reload(void) +{ + git_repository *tmp_repo; + git_annotated_commit *their_heads[1]; + git_oid their_oid; + git_index_entry entry = {{0}}; + git_index *tmp_index; + + cl_git_pass(git_repository_open(&tmp_repo, git_repository_workdir(repo))); + cl_git_pass(git_repository_index(&tmp_index, tmp_repo)); + cl_git_pass(git_index_read(repo_index, 0)); + + entry.mode = GIT_FILEMODE_BLOB; + cl_git_pass(git_oid_fromstr(&entry.id, "11deab00b2d3a6f5a3073988ac050c2d7b6655e2")); + entry.path = "automergeable.txt"; + cl_git_pass(git_index_add(repo_index, &entry)); + + cl_git_pass(git_index_add_bypath(tmp_index, "automergeable.txt")); + cl_git_pass(git_index_write(tmp_index)); + + cl_git_pass(git_oid_fromstr(&their_oid, THEIRS_SIMPLE_OID)); + cl_git_pass(git_annotated_commit_lookup(&their_heads[0], repo, &their_oid)); + cl_git_pass(git_merge(repo, (const git_annotated_commit **)their_heads, 1, NULL, NULL)); + + git_index_free(tmp_index); + git_repository_free(tmp_repo); + git_annotated_commit_free(their_heads[0]); +} + void test_merge_workdir_simple__automerge_crlf(void) { #ifdef GIT_WIN32 |