Git 2.33.8
[git.git] / t / t6427-diff3-conflict-markers.sh
blob25c4b720e72712d07b344aebc8d797136cda83be
1 #!/bin/sh
3 test_description='recursive merge diff3 style conflict markers'
5 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
6 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
8 . ./test-lib.sh
10 # Setup:
11 # L1
12 # \
13 # ?
14 # /
15 # R1
17 # Where:
18 # L1 and R1 both have a file named 'content' but have no common history
21 test_expect_success 'setup no merge base' '
22 test_create_repo no_merge_base &&
24 cd no_merge_base &&
26 git checkout -b L &&
27 test_commit A content A &&
29 git checkout --orphan R &&
30 test_commit B content B
34 test_expect_success 'check no merge base' '
36 cd no_merge_base &&
38 git checkout L^0 &&
40 test_must_fail git -c merge.conflictstyle=diff3 merge --allow-unrelated-histories -s recursive R^0 &&
42 grep "|||||| empty tree" content
46 # Setup:
47 # L1
48 # / \
49 # main ?
50 # \ /
51 # R1
53 # Where:
54 # L1 and R1 have modified the same file ('content') in conflicting ways
57 test_expect_success 'setup unique merge base' '
58 test_create_repo unique_merge_base &&
60 cd unique_merge_base &&
62 test_commit base content "1
67 " &&
69 git branch L &&
70 git branch R &&
72 git checkout L &&
73 test_commit L content "1
78 7" &&
80 git checkout R &&
81 git rm content &&
82 test_commit R renamed "1
87 six"
91 test_expect_success 'check unique merge base' '
93 cd unique_merge_base &&
95 git checkout L^0 &&
96 MAIN=$(git rev-parse --short main) &&
98 test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R^0 &&
100 grep "|||||| $MAIN:content" renamed
104 # Setup:
105 # L1---L2--L3
106 # / \ / \
107 # main X1 ?
108 # \ / \ /
109 # R1---R2--R3
111 # Where:
112 # commits L1 and R1 have modified the same file in non-conflicting ways
113 # X1 is an auto-generated merge-base used when merging L1 and R1
114 # commits L2 and R2 are merges of R1 and L1 into L1 and R1, respectively
115 # commits L3 and R3 both modify 'content' in conflicting ways
118 test_expect_success 'setup multiple merge bases' '
119 test_create_repo multiple_merge_bases &&
121 cd multiple_merge_bases &&
123 test_commit initial content "1
127 5" &&
129 git branch L &&
130 git branch R &&
132 # Create L1
133 git checkout L &&
134 test_commit L1 content "0
139 5" &&
141 # Create R1
142 git checkout R &&
143 test_commit R1 content "1
148 6" &&
150 # Create L2
151 git checkout L &&
152 git merge R1 &&
154 # Create R2
155 git checkout R &&
156 git merge L1 &&
158 # Create L3
159 git checkout L &&
160 test_commit L3 content "0
166 A" &&
168 # Create R3
169 git checkout R &&
170 git rm content &&
171 test_commit R3 renamed "0
176 six"
180 test_expect_success 'check multiple merge bases' '
182 cd multiple_merge_bases &&
184 git checkout L^0 &&
186 test_must_fail git -c merge.conflictstyle=diff3 merge -s recursive R^0 &&
188 grep "|||||| merged common ancestors:content" renamed
192 test_expect_success 'rebase --merge describes parent of commit being picked' '
193 test_create_repo rebase &&
195 cd rebase &&
196 test_commit base file &&
197 test_commit main file &&
198 git checkout -b side HEAD^ &&
199 test_commit side file &&
200 test_must_fail git -c merge.conflictstyle=diff3 rebase --merge main &&
201 grep "||||||| parent of" file
205 test_expect_success 'rebase --apply describes fake ancestor base' '
207 cd rebase &&
208 git rebase --abort &&
209 test_must_fail git -c merge.conflictstyle=diff3 rebase --apply main &&
210 grep "||||||| constructed merge base" file
214 test_done