t6036, t6043: increase code coverage for file collision handling

Stolee's coverage reports found a few code blocks for file collision conflicts that had not previously been covered by testcases; add a few more testcases to cover those too. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Nov 7, 2018 at 20:40 UTC b8cd1bb71306e489d73e5cf4ef75a6cdb4c223b7
2 files changed +88
t/t6036-recursive-corner-cases.sh
+51
@@ -240,6 +240,57 @@ test_expect_success 'git detects differently handled merges conflict' '
240 )
241 '
242
243 +# Repeat the above testcase with precisely the same setup, other than with
244 +# the two merge bases having different orderings of commit timestamps so
245 +# that they are reversed in the order they are provided to merge-recursive,
246 +# so that we can improve code coverage.
247 +test_expect_success 'git detects differently handled merges conflict, swapped' '
248 + (
249 + cd rename-add &&
250 +
251 + # Difference #1: Do cleanup from previous testrun
252 + git reset --hard &&
253 + git clean -fdqx &&
254 +
255 + # Difference #2: Change commit timestamps
256 + btime=$(git log --no-walk --date=raw --format=%cd B | awk "{print \$1}") &&
257 + ctime=$(git log --no-walk --date=raw --format=%cd C | awk "{print \$1}") &&
258 + newctime=$(($btime+1)) &&
259 + git fast-export --no-data --all | sed -e s/$ctime/$newctime/ | git fast-import --force --quiet &&
260 + # End of differences; rest is copy-paste of last test
261 +
262 + git checkout D^0 &&
263 + test_must_fail git merge -s recursive E^0 &&
264 +
265 + git ls-files -s >out &&
266 + test_line_count = 3 out &&
267 + git ls-files -u >out &&
268 + test_line_count = 3 out &&
269 + git ls-files -o >out &&
270 + test_line_count = 1 out &&
271 +
272 + git rev-parse >expect \
273 + C:new_a D:new_a E:new_a &&
274 + git rev-parse >actual \
275 + :1:new_a :2:new_a :3:new_a &&
276 + test_cmp expect actual &&
277 +
278 + # Test that the two-way merge in new_a is as expected
279 + git cat-file -p D:new_a >ours &&
280 + git cat-file -p E:new_a >theirs &&
281 + >empty &&
282 + test_must_fail git merge-file \
283 + -L "HEAD" \
284 + -L "" \
285 + -L "E^0" \
286 + ours empty theirs &&
287 + sed -e "s/^\([<=>]\)/\1\1\1/" ours >expect &&
288 + git hash-object new_a >actual &&
289 + git hash-object ours >expect &&
290 + test_cmp expect actual
291 + )
292 +'
293 +
294 #
295 # criss-cross + modify/delete:
296 #
t/t6043-merge-rename-directories.sh
+37
@@ -3163,6 +3163,43 @@ test_expect_success '10c-check: Overwrite untracked with dir rename/rename(1to2)
3163 )
3164 '
3165
3166 +test_expect_success '10c-check: Overwrite untracked with dir rename/rename(1to2), other direction' '
3167 + (
3168 + cd 10c &&
3169 +
3170 + git reset --hard &&
3171 + git clean -fdqx &&
3172 +
3173 + git checkout B^0 &&
3174 + mkdir y &&
3175 + echo important >y/c &&
3176 +
3177 + test_must_fail git merge -s recursive A^0 >out 2>err &&
3178 + test_i18ngrep "CONFLICT (rename/rename)" out &&
3179 + test_i18ngrep "Refusing to lose untracked file at y/c; adding as y/c~HEAD instead" out &&
3180 +
3181 + git ls-files -s >out &&
3182 + test_line_count = 6 out &&
3183 + git ls-files -u >out &&
3184 + test_line_count = 3 out &&
3185 + git ls-files -o >out &&
3186 + test_line_count = 3 out &&
3187 +
3188 + git rev-parse >actual \
3189 + :0:y/a :0:y/b :0:x/d :1:x/c :3:w/c :2:y/c &&
3190 + git rev-parse >expect \
3191 + O:z/a O:z/b O:x/d O:x/c O:x/c O:x/c &&
3192 + test_cmp expect actual &&
3193 +
3194 + git hash-object y/c~HEAD >actual &&
3195 + git rev-parse O:x/c >expect &&
3196 + test_cmp expect actual &&
3197 +
3198 + echo important >expect &&
3199 + test_cmp expect y/c
3200 + )
3201 +'
3202 +
3203 # Testcase 10d, Delete untracked w/ dir rename/rename(2to1)
3204 # Commit O: z/{a,b,c_1}, x/{d,e,f_2}
3205 # Commit A: y/{a,b}, x/{d,e,f_2,wham_1} + untracked y/wham