Merge branch 'tb/commit-graph-genv2-upgrade-fix' into maint
[git/debian.git] / t / t4069-remerge-diff.sh
blob35f94957fceb2b02df9846a256f925833c6b4ba0
1 #!/bin/sh
3 test_description='remerge-diff handling'
5 . ./test-lib.sh
7 # This test is ort-specific
8 if test "${GIT_TEST_MERGE_ALGORITHM}" != ort
9 then
10 skip_all="GIT_TEST_MERGE_ALGORITHM != ort"
11 test_done
14 test_expect_success 'setup basic merges' '
15 test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
16 git add numbers &&
17 git commit -m base &&
19 git branch feature_a &&
20 git branch feature_b &&
21 git branch feature_c &&
23 git branch ab_resolution &&
24 git branch bc_resolution &&
26 git checkout feature_a &&
27 test_write_lines 1 2 three 4 5 6 7 eight 9 >numbers &&
28 git commit -a -m change_a &&
30 git checkout feature_b &&
31 test_write_lines 1 2 tres 4 5 6 7 8 9 >numbers &&
32 git commit -a -m change_b &&
34 git checkout feature_c &&
35 test_write_lines 1 2 3 4 5 6 7 8 9 10 >numbers &&
36 git commit -a -m change_c &&
38 git checkout bc_resolution &&
39 git merge --ff-only feature_b &&
40 # no conflict
41 git merge feature_c &&
43 git checkout ab_resolution &&
44 git merge --ff-only feature_a &&
45 # conflicts!
46 test_must_fail git merge feature_b &&
47 # Resolve conflict...and make another change elsewhere
48 test_write_lines 1 2 drei 4 5 6 7 acht 9 >numbers &&
49 git add numbers &&
50 git merge --continue
53 test_expect_success 'remerge-diff on a clean merge' '
54 git log -1 --oneline bc_resolution >expect &&
55 git show --oneline --remerge-diff bc_resolution >actual &&
56 test_cmp expect actual
59 test_expect_success 'remerge-diff with both a resolved conflict and an unrelated change' '
60 git log -1 --oneline ab_resolution >tmp &&
61 cat <<-EOF >>tmp &&
62 diff --git a/numbers b/numbers
63 remerge CONFLICT (content): Merge conflict in numbers
64 index a1fb731..6875544 100644
65 --- a/numbers
66 +++ b/numbers
67 @@ -1,13 +1,9 @@
70 -<<<<<<< b0ed5cb (change_a)
71 -three
72 -=======
73 -tres
74 ->>>>>>> 6cd3f82 (change_b)
75 +drei
80 -eight
81 +acht
83 EOF
84 # Hashes above are sha1; rip them out so test works with sha256
85 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
87 git show --oneline --remerge-diff ab_resolution >tmp &&
88 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
89 test_cmp expect actual
92 test_expect_success 'setup non-content conflicts' '
93 git switch --orphan base &&
95 test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
96 test_write_lines a b c d e f g h i >letters &&
97 test_write_lines in the way >content &&
98 git add numbers letters content &&
99 git commit -m base &&
101 git branch side1 &&
102 git branch side2 &&
104 git checkout side1 &&
105 test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
106 git mv letters letters_side1 &&
107 git mv content file_or_directory &&
108 git add numbers &&
109 git commit -m side1 &&
111 git checkout side2 &&
112 git rm numbers &&
113 git mv letters letters_side2 &&
114 mkdir file_or_directory &&
115 echo hello >file_or_directory/world &&
116 git add file_or_directory/world &&
117 git commit -m side2 &&
119 git checkout -b resolution side1 &&
120 test_must_fail git merge side2 &&
121 test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
122 git add numbers &&
123 git add letters_side1 &&
124 git rm letters &&
125 git rm letters_side2 &&
126 git add file_or_directory~HEAD &&
127 git mv file_or_directory~HEAD wanted_content &&
128 git commit -m resolved
131 test_expect_success 'remerge-diff with non-content conflicts' '
132 git log -1 --oneline resolution >tmp &&
133 cat <<-EOF >>tmp &&
134 diff --git a/file_or_directory~HASH (side1) b/wanted_content
135 similarity index 100%
136 rename from file_or_directory~HASH (side1)
137 rename to wanted_content
138 remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
139 diff --git a/letters b/letters
140 remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
141 diff --git a/letters_side2 b/letters_side2
142 deleted file mode 100644
143 index b236ae5..0000000
144 --- a/letters_side2
145 +++ /dev/null
146 @@ -1,9 +0,0 @@
156 diff --git a/numbers b/numbers
157 remerge CONFLICT (modify/delete): numbers deleted in HASH (side2) and modified in HASH (side1). Version HASH (side1) of numbers left in tree.
159 # We still have some sha1 hashes above; rip them out so test works
160 # with sha256
161 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
163 git show --oneline --remerge-diff resolution >tmp &&
164 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
165 test_cmp expect actual
168 test_expect_success 'remerge-diff w/ diff-filter=U: all conflict headers, no diff content' '
169 git log -1 --oneline resolution >tmp &&
170 cat <<-EOF >>tmp &&
171 diff --git a/file_or_directory~HASH (side1) b/file_or_directory~HASH (side1)
172 remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
173 diff --git a/letters b/letters
174 remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
175 diff --git a/numbers b/numbers
176 remerge CONFLICT (modify/delete): numbers deleted in HASH (side2) and modified in HASH (side1). Version HASH (side1) of numbers left in tree.
178 # We still have some sha1 hashes above; rip them out so test works
179 # with sha256
180 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
182 git show --oneline --remerge-diff --diff-filter=U resolution >tmp &&
183 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
184 test_cmp expect actual
187 test_expect_success 'remerge-diff w/ diff-filter=R: relevant file + conflict header' '
188 git log -1 --oneline resolution >tmp &&
189 cat <<-EOF >>tmp &&
190 diff --git a/file_or_directory~HASH (side1) b/wanted_content
191 similarity index 100%
192 rename from file_or_directory~HASH (side1)
193 rename to wanted_content
194 remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
196 # We still have some sha1 hashes above; rip them out so test works
197 # with sha256
198 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
200 git show --oneline --remerge-diff --diff-filter=R resolution >tmp &&
201 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
202 test_cmp expect actual
205 test_expect_success 'remerge-diff w/ pathspec: limits to relevant file including conflict header' '
206 git log -1 --oneline resolution >tmp &&
207 cat <<-EOF >>tmp &&
208 diff --git a/letters b/letters
209 remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
210 diff --git a/letters_side2 b/letters_side2
211 deleted file mode 100644
212 index b236ae5..0000000
213 --- a/letters_side2
214 +++ /dev/null
215 @@ -1,9 +0,0 @@
226 # We still have some sha1 hashes above; rip them out so test works
227 # with sha256
228 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
230 git show --oneline --remerge-diff resolution -- "letters*" >tmp &&
231 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
232 test_cmp expect actual
235 test_expect_success 'setup non-content conflicts' '
236 git switch --orphan newbase &&
238 test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
239 git add numbers &&
240 git commit -m base &&
242 git branch newside1 &&
243 git branch newside2 &&
245 git checkout newside1 &&
246 test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
247 git add numbers &&
248 git commit -m side1 &&
250 git checkout newside2 &&
251 test_write_lines 1 2 drei 4 5 6 7 8 9 >numbers &&
252 git add numbers &&
253 git commit -m side2 &&
255 git checkout -b newresolution newside1 &&
256 test_must_fail git merge newside2 &&
257 git checkout --theirs numbers &&
258 git add -u numbers &&
259 git commit -m resolved
262 test_expect_success 'remerge-diff turns off history simplification' '
263 git log -1 --oneline newresolution >tmp &&
264 cat <<-EOF >>tmp &&
265 diff --git a/numbers b/numbers
266 remerge CONFLICT (content): Merge conflict in numbers
267 index 070e9e7..5335e78 100644
268 --- a/numbers
269 +++ b/numbers
270 @@ -1,10 +1,6 @@
273 -<<<<<<< 96f1e45 (side1)
274 -three
275 -=======
276 drei
277 ->>>>>>> 4fd522f (side2)
282 # We still have some sha1 hashes above; rip them out so test works
283 # with sha256
284 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
286 git show --oneline --remerge-diff newresolution -- numbers >tmp &&
287 sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
288 test_cmp expect actual
291 test_done