@@ -60,6 +60,7 @@ test_expect_success 'remerge-diff with both a resolved conflict and an unrelated
60
60
git log -1 --oneline ab_resolution >tmp &&
61
61
cat <<-EOF >>tmp &&
62
62
diff --git a/numbers b/numbers
63
+ remerge CONFLICT (content): Merge conflict in numbers
63
64
index a1fb731..6875544 100644
64
65
--- a/numbers
65
66
+++ b/numbers
@@ -88,4 +89,147 @@ test_expect_success 'remerge-diff with both a resolved conflict and an unrelated
88
89
test_cmp expect actual
89
90
'
90
91
92
+ test_expect_success ' setup non-content conflicts' '
93
+ git switch --orphan base &&
94
+
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 &&
100
+
101
+ git branch side1 &&
102
+ git branch side2 &&
103
+
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 &&
110
+
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 &&
118
+
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
129
+ '
130
+
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 @@
147
+ -a
148
+ -b
149
+ -c
150
+ -d
151
+ -e
152
+ -f
153
+ -g
154
+ -h
155
+ -i
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.
158
+ EOF
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 &&
162
+
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
166
+ '
167
+
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.
177
+ EOF
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 &&
181
+
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
185
+ '
186
+
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.
195
+ EOF
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 &&
199
+
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
203
+ '
204
+
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 @@
216
+ -a
217
+ -b
218
+ -c
219
+ -d
220
+ -e
221
+ -f
222
+ -g
223
+ -h
224
+ -i
225
+ EOF
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 &&
229
+
230
+ git show --oneline --remerge-diff --full-history resolution -- "letters*" >tmp &&
231
+ sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
232
+ test_cmp expect actual
233
+ '
234
+
91
235
test_done
0 commit comments