Skip to content

Commit 66c62ea

Browse files
committed
Merge branch 'en/merge-tests'
Preparation for a new merge strategy. * en/merge-tests: t6423: add more details about direct resolution of directories t6423: note improved ort handling with untracked files t6423, t6436: note improved ort handling with dirty files merge tests: expect slight differences in output for recursive vs. ort t6423: expect improved conflict markers labels in the ort backend t6404, t6423: expect improved rename/delete handling in ort backend t6416: correct expectation for rename/rename(1to2) + directory/file merge tests: expect improved directory/file conflict handling in ort t/: new helper for tests that pass with ort but fail with recursive
2 parents 2ad1f93 + 848a856 commit 66c62ea

13 files changed

+807
-386
lines changed

t/lib-merge.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Helper functions used by merge tests.
2+
3+
test_expect_merge_algorithm () {
4+
status_for_recursive=$1 status_for_ort=$2
5+
shift 2
6+
7+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
8+
then
9+
test_expect_${status_for_ort} "$@"
10+
else
11+
test_expect_${status_for_recursive} "$@"
12+
fi
13+
}

t/t6400-merge-df.sh

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,12 @@ test_expect_success 'modify/delete + directory/file conflict' '
8181
8282
test 5 -eq $(git ls-files -s | wc -l) &&
8383
test 4 -eq $(git ls-files -u | wc -l) &&
84-
test 1 -eq $(git ls-files -o | wc -l) &&
84+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
85+
then
86+
test 0 -eq $(git ls-files -o | wc -l)
87+
else
88+
test 1 -eq $(git ls-files -o | wc -l)
89+
fi &&
8590
8691
test_path_is_file letters/file &&
8792
test_path_is_file letters.txt &&
@@ -97,7 +102,12 @@ test_expect_success 'modify/delete + directory/file conflict; other way' '
97102
98103
test 5 -eq $(git ls-files -s | wc -l) &&
99104
test 4 -eq $(git ls-files -u | wc -l) &&
100-
test 1 -eq $(git ls-files -o | wc -l) &&
105+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
106+
then
107+
test 0 -eq $(git ls-files -o | wc -l)
108+
else
109+
test 1 -eq $(git ls-files -o | wc -l)
110+
fi &&
101111
102112
test_path_is_file letters/file &&
103113
test_path_is_file letters.txt &&

t/t6402-merge-rename.sh

Lines changed: 93 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,12 @@ test_expect_success 'Rename+D/F conflict; renamed file merges but dir in way' '
320320
321321
test_i18ngrep "CONFLICT (modify/delete): dir/file-in-the-way" output &&
322322
test_i18ngrep "Auto-merging dir" output &&
323-
test_i18ngrep "Adding as dir~HEAD instead" output &&
323+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
324+
then
325+
test_i18ngrep "moving it to dir~HEAD instead" output
326+
else
327+
test_i18ngrep "Adding as dir~HEAD instead" output
328+
fi &&
324329
325330
test 3 -eq "$(git ls-files -u | wc -l)" &&
326331
test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
@@ -342,7 +347,12 @@ test_expect_success 'Same as previous, but merged other way' '
342347
! grep "error: refusing to lose untracked file at" errors &&
343348
test_i18ngrep "CONFLICT (modify/delete): dir/file-in-the-way" output &&
344349
test_i18ngrep "Auto-merging dir" output &&
345-
test_i18ngrep "Adding as dir~renamed-file-has-no-conflicts instead" output &&
350+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
351+
then
352+
test_i18ngrep "moving it to dir~renamed-file-has-no-conflicts instead" output
353+
else
354+
test_i18ngrep "Adding as dir~renamed-file-has-no-conflicts instead" output
355+
fi &&
346356
347357
test 3 -eq "$(git ls-files -u | wc -l)" &&
348358
test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
@@ -397,7 +407,12 @@ test_expect_success 'Rename+D/F conflict; renamed file cannot merge and dir in t
397407
test_must_fail git merge --strategy=recursive dir-in-way &&
398408
399409
test 5 -eq "$(git ls-files -u | wc -l)" &&
400-
test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" &&
410+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
411+
then
412+
test 3 -eq "$(git ls-files -u dir~HEAD | wc -l)"
413+
else
414+
test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)"
415+
fi &&
401416
test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
402417
403418
test_must_fail git diff --quiet &&
@@ -415,7 +430,12 @@ test_expect_success 'Same as previous, but merged other way' '
415430
test_must_fail git merge --strategy=recursive renamed-file-has-conflicts &&
416431
417432
test 5 -eq "$(git ls-files -u | wc -l)" &&
418-
test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" &&
433+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
434+
then
435+
test 3 -eq "$(git ls-files -u dir~renamed-file-has-conflicts | wc -l)"
436+
else
437+
test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)"
438+
fi &&
419439
test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
420440
421441
test_must_fail git diff --quiet &&
@@ -471,7 +491,12 @@ test_expect_success 'both rename source and destination involved in D/F conflict
471491
git checkout -q rename-dest^0 &&
472492
test_must_fail git merge --strategy=recursive source-conflict &&
473493
474-
test 1 -eq "$(git ls-files -u | wc -l)" &&
494+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
495+
then
496+
test 2 -eq "$(git ls-files -u | wc -l)"
497+
else
498+
test 1 -eq "$(git ls-files -u | wc -l)"
499+
fi &&
475500
476501
test_must_fail git diff --quiet &&
477502
@@ -505,34 +530,63 @@ test_expect_success 'setup pair rename to parent of other (D/F conflicts)' '
505530
git commit -m "Rename one/file -> two"
506531
'
507532

508-
test_expect_success 'pair rename to parent of other (D/F conflicts) w/ untracked dir' '
509-
git checkout -q rename-one^0 &&
510-
mkdir one &&
511-
test_must_fail git merge --strategy=recursive rename-two &&
533+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
534+
then
535+
test_expect_success 'pair rename to parent of other (D/F conflicts) w/ untracked dir' '
536+
git checkout -q rename-one^0 &&
537+
mkdir one &&
538+
test_must_fail git merge --strategy=recursive rename-two &&
512539
513-
test 2 -eq "$(git ls-files -u | wc -l)" &&
514-
test 1 -eq "$(git ls-files -u one | wc -l)" &&
515-
test 1 -eq "$(git ls-files -u two | wc -l)" &&
540+
test 4 -eq "$(git ls-files -u | wc -l)" &&
541+
test 2 -eq "$(git ls-files -u one | wc -l)" &&
542+
test 2 -eq "$(git ls-files -u two | wc -l)" &&
516543
517-
test_must_fail git diff --quiet &&
544+
test_must_fail git diff --quiet &&
518545
519-
test 4 -eq $(find . | grep -v .git | wc -l) &&
546+
test 3 -eq $(find . | grep -v .git | wc -l) &&
520547
521-
test_path_is_dir one &&
522-
test_path_is_file one~rename-two &&
523-
test_path_is_file two &&
524-
test "other" = $(cat one~rename-two) &&
525-
test "stuff" = $(cat two)
526-
'
548+
test_path_is_file one &&
549+
test_path_is_file two &&
550+
test "other" = $(cat one) &&
551+
test "stuff" = $(cat two)
552+
'
553+
else
554+
test_expect_success 'pair rename to parent of other (D/F conflicts) w/ untracked dir' '
555+
git checkout -q rename-one^0 &&
556+
mkdir one &&
557+
test_must_fail git merge --strategy=recursive rename-two &&
558+
559+
test 2 -eq "$(git ls-files -u | wc -l)" &&
560+
test 1 -eq "$(git ls-files -u one | wc -l)" &&
561+
test 1 -eq "$(git ls-files -u two | wc -l)" &&
562+
563+
test_must_fail git diff --quiet &&
564+
565+
test 4 -eq $(find . | grep -v .git | wc -l) &&
566+
567+
test_path_is_dir one &&
568+
test_path_is_file one~rename-two &&
569+
test_path_is_file two &&
570+
test "other" = $(cat one~rename-two) &&
571+
test "stuff" = $(cat two)
572+
'
573+
fi
527574

528575
test_expect_success 'pair rename to parent of other (D/F conflicts) w/ clean start' '
529576
git reset --hard &&
530577
git clean -fdqx &&
531578
test_must_fail git merge --strategy=recursive rename-two &&
532579
533-
test 2 -eq "$(git ls-files -u | wc -l)" &&
534-
test 1 -eq "$(git ls-files -u one | wc -l)" &&
535-
test 1 -eq "$(git ls-files -u two | wc -l)" &&
580+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
581+
then
582+
test 4 -eq "$(git ls-files -u | wc -l)" &&
583+
test 2 -eq "$(git ls-files -u one | wc -l)" &&
584+
test 2 -eq "$(git ls-files -u two | wc -l)"
585+
else
586+
test 2 -eq "$(git ls-files -u | wc -l)" &&
587+
test 1 -eq "$(git ls-files -u one | wc -l)" &&
588+
test 1 -eq "$(git ls-files -u two | wc -l)"
589+
fi &&
536590
537591
test_must_fail git diff --quiet &&
538592
@@ -572,12 +626,22 @@ test_expect_success 'check handling of differently renamed file with D/F conflic
572626
git checkout -q first-rename^0 &&
573627
test_must_fail git merge --strategy=recursive second-rename &&
574628
575-
test 5 -eq "$(git ls-files -s | wc -l)" &&
576-
test 3 -eq "$(git ls-files -u | wc -l)" &&
577-
test 1 -eq "$(git ls-files -u one | wc -l)" &&
578-
test 1 -eq "$(git ls-files -u two | wc -l)" &&
579-
test 1 -eq "$(git ls-files -u original | wc -l)" &&
580-
test 2 -eq "$(git ls-files -o | wc -l)" &&
629+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
630+
then
631+
test 5 -eq "$(git ls-files -s | wc -l)" &&
632+
test 3 -eq "$(git ls-files -u | wc -l)" &&
633+
test 1 -eq "$(git ls-files -u one~HEAD | wc -l)" &&
634+
test 1 -eq "$(git ls-files -u two~second-rename | wc -l)" &&
635+
test 1 -eq "$(git ls-files -u original | wc -l)" &&
636+
test 0 -eq "$(git ls-files -o | wc -l)"
637+
else
638+
test 5 -eq "$(git ls-files -s | wc -l)" &&
639+
test 3 -eq "$(git ls-files -u | wc -l)" &&
640+
test 1 -eq "$(git ls-files -u one | wc -l)" &&
641+
test 1 -eq "$(git ls-files -u two | wc -l)" &&
642+
test 1 -eq "$(git ls-files -u original | wc -l)" &&
643+
test 2 -eq "$(git ls-files -o | wc -l)"
644+
fi &&
581645
582646
test_path_is_file one/file &&
583647
test_path_is_file two/file &&

t/t6404-recursive-merge.sh

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,22 @@ test_expect_success 'mark rename/delete as unmerged' '
118118
test_tick &&
119119
git commit -m rename &&
120120
test_must_fail git merge delete &&
121-
test 1 = $(git ls-files --unmerged | wc -l) &&
121+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
122+
then
123+
test 2 = $(git ls-files --unmerged | wc -l)
124+
else
125+
test 1 = $(git ls-files --unmerged | wc -l)
126+
fi &&
122127
git rev-parse --verify :2:a2 &&
123128
test_must_fail git rev-parse --verify :3:a2 &&
124129
git checkout -f delete &&
125130
test_must_fail git merge rename &&
126-
test 1 = $(git ls-files --unmerged | wc -l) &&
131+
if test "$GIT_TEST_MERGE_ALGORITHM" = ort
132+
then
133+
test 2 = $(git ls-files --unmerged | wc -l)
134+
else
135+
test 1 = $(git ls-files --unmerged | wc -l)
136+
fi &&
127137
test_must_fail git rev-parse --verify :2:a2 &&
128138
git rev-parse --verify :3:a2
129139
'

0 commit comments

Comments
 (0)