diff options
-rw-r--r-- | src/checkout.c | 7 | ||||
-rw-r--r-- | tests/merge/workdir/submodules.c | 36 | ||||
-rw-r--r-- | tests/resources/merge-resolve/.gitted/objects/50/c5dc8cdfe40c688eb0a0e23be54dd57cae2e78 | 2 | ||||
-rw-r--r-- | tests/resources/merge-resolve/.gitted/objects/7a/a825857f87aea74ddf13d954568aa30dfcdeb4 | bin | 0 -> 117 bytes | |||
-rw-r--r-- | tests/resources/merge-resolve/.gitted/refs/heads/delete-submodule | 1 |
5 files changed, 44 insertions, 2 deletions
diff --git a/src/checkout.c b/src/checkout.c index caed6cdf1..528fbdf92 100644 --- a/src/checkout.c +++ b/src/checkout.c @@ -2022,8 +2022,11 @@ static int checkout_write_entry( (error = checkout_safe_for_update_only(data, fullpath->ptr, side->mode)) <= 0) return error; - return checkout_write_content(data, - &side->id, fullpath->ptr, hint_path, side->mode, &st); + if (!S_ISGITLINK(side->mode)) + return checkout_write_content(data, + &side->id, fullpath->ptr, hint_path, side->mode, &st); + + return 0; } static int checkout_write_entries( diff --git a/tests/merge/workdir/submodules.c b/tests/merge/workdir/submodules.c index 7c18c2ffb..c4cc188a8 100644 --- a/tests/merge/workdir/submodules.c +++ b/tests/merge/workdir/submodules.c @@ -12,6 +12,7 @@ static git_repository *repo; #define SUBMODULE_MAIN_BRANCH "submodules" #define SUBMODULE_OTHER_BRANCH "submodules-branch" #define SUBMODULE_OTHER2_BRANCH "submodules-branch2" +#define SUBMODULE_DELETE_BRANCH "delete-submodule" #define TEST_INDEX_PATH TEST_REPO_PATH "/.git/index" @@ -93,3 +94,38 @@ void test_merge_workdir_submodules__take_changed(void) git_reference_free(their_ref); git_reference_free(our_ref); } + + +void test_merge_workdir_submodules__update_delete_conflict(void) +{ + git_reference *our_ref, *their_ref; + git_commit *our_commit; + git_annotated_commit *their_head; + git_index *index; + + struct merge_index_entry merge_index_entries[] = { + { 0100644, "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", 0, ".gitmodules" }, + { 0100644, "5887a5e516c53bd58efb0f02ec6aa031b6fe9ad7", 0, "file1.txt" }, + { 0100644, "4218670ab81cc219a9f94befb5c5dad90ec52648", 0, "file2.txt" }, + { 0160000, "d3d806a4bef96889117fd7ebac0e3cb5ec152932", 1, "submodule"}, + { 0160000, "297aa6cd028b3336c7802c7a6f49143da4e1602d", 3, "submodule" }, + }; + + cl_git_pass(git_reference_lookup(&our_ref, repo, "refs/heads/" SUBMODULE_DELETE_BRANCH)); + cl_git_pass(git_commit_lookup(&our_commit, repo, git_reference_target(our_ref))); + cl_git_pass(git_reset(repo, (git_object *)our_commit, GIT_RESET_HARD, NULL)); + + cl_git_pass(git_reference_lookup(&their_ref, repo, "refs/heads/" SUBMODULE_MAIN_BRANCH)); + cl_git_pass(git_annotated_commit_from_ref(&their_head, repo, their_ref)); + + cl_git_pass(git_merge(repo, (const git_annotated_commit **)&their_head, 1, NULL, NULL)); + + cl_git_pass(git_repository_index(&index, repo)); + cl_assert(merge_test_index(index, merge_index_entries, 5)); + + git_index_free(index); + git_annotated_commit_free(their_head); + git_commit_free(our_commit); + git_reference_free(their_ref); + git_reference_free(our_ref); +} diff --git a/tests/resources/merge-resolve/.gitted/objects/50/c5dc8cdfe40c688eb0a0e23be54dd57cae2e78 b/tests/resources/merge-resolve/.gitted/objects/50/c5dc8cdfe40c688eb0a0e23be54dd57cae2e78 new file mode 100644 index 000000000..c04baa14b --- /dev/null +++ b/tests/resources/merge-resolve/.gitted/objects/50/c5dc8cdfe40c688eb0a0e23be54dd57cae2e78 @@ -0,0 +1,2 @@ +x] +0})Jv">x/I6ZhIӞ*aeZC`F6;KLO).y8N^ }a'Ѱ S*gpmHp_sh/O>.PiF?,kJZGoJT
\ No newline at end of file diff --git a/tests/resources/merge-resolve/.gitted/objects/7a/a825857f87aea74ddf13d954568aa30dfcdeb4 b/tests/resources/merge-resolve/.gitted/objects/7a/a825857f87aea74ddf13d954568aa30dfcdeb4 Binary files differnew file mode 100644 index 000000000..b9c06303b --- /dev/null +++ b/tests/resources/merge-resolve/.gitted/objects/7a/a825857f87aea74ddf13d954568aa30dfcdeb4 diff --git a/tests/resources/merge-resolve/.gitted/refs/heads/delete-submodule b/tests/resources/merge-resolve/.gitted/refs/heads/delete-submodule new file mode 100644 index 000000000..1951316d5 --- /dev/null +++ b/tests/resources/merge-resolve/.gitted/refs/heads/delete-submodule @@ -0,0 +1 @@ +50c5dc8cdfe40c688eb0a0e23be54dd57cae2e78 |