diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2018-01-21 16:50:40 +0000 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2018-03-10 17:45:25 +0000 |
commit | dc51d77406bca64c8b45e22fab4d80cfbbb08b6d (patch) | |
tree | 87d8b54e60d7b1eff57d685d927d7cfab4887dbe | |
parent | b2b370773a8a0a0419c629f4babd4fee3eddf6e3 (diff) | |
download | libgit2-dc51d77406bca64c8b45e22fab4d80cfbbb08b6d.tar.gz |
merge::trees::recursive: test for virtual base building
Virtual base building: ensure that the virtual base is created and
revwalked in the same way as git.
-rw-r--r-- | tests/merge/trees/recursive.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/merge/trees/recursive.c b/tests/merge/trees/recursive.c index ca205bcb0..7be674b27 100644 --- a/tests/merge/trees/recursive.c +++ b/tests/merge/trees/recursive.c @@ -408,3 +408,28 @@ void test_merge_trees_recursive__recursionlimit(void) git_index_free(index); } +/* There are multiple levels of criss-cross merges. This ensures + * that the virtual merge base parents are compared in the same + * order as git. If the base parents are created in the order as + * git does, then the file `targetfile.txt` is automerged. If not, + * `targetfile.txt` will be in conflict due to the virtual merge + * base. + */ +void test_merge_trees_recursive__merge_base_for_virtual_commit(void) +{ + git_index *index; + git_merge_options opts = GIT_MERGE_OPTIONS_INIT; + + struct merge_index_entry merge_index_entries[] = { + { 0100644, "1bde1883de4977ea3e664b315da951d1f614c3b1", 0, "targetfile.txt" }, + { 0100644, "b7de2b52ba055688061355fad1599a5d214ce8f8", 1, "version.txt" }, + { 0100644, "358efd6f589384fa8baf92234db9c7899a53916e", 2, "version.txt" }, + { 0100644, "a664873b1c0b9a1ed300f8644dde536fdaa3a34f", 3, "version.txt" }, + }; + + cl_git_pass(merge_commits_from_branches(&index, repo, "branchJ-1", "branchJ-2", &opts)); + + cl_assert(merge_test_index(index, merge_index_entries, 4)); + + git_index_free(index); +} |