t/t3210-pack-refs.sh: use the $( ... ) construct for command substitution
[gitweb.git] / t / t7600-merge.sh
index b16462132fd01f21cfd2af40a3c769803b0b7c50..302e23826341bce6c3797330b5f2996877dc5baf 100755 (executable)
@@ -133,7 +133,7 @@ test_expect_success 'setup' '
        test_tick &&
        git commit -m "commit 3" &&
        git tag c3 &&
-       c3=$(git rev-parse HEAD)
+       c3=$(git rev-parse HEAD) &&
        git reset --hard "$c0" &&
        create_merge_msgs
 '
@@ -692,4 +692,37 @@ test_expect_success GPG 'merge --no-edit tag should skip editor' '
        test_cmp actual expect
 '
 
+test_expect_success 'set up mod-256 conflict scenario' '
+       # 256 near-identical stanzas...
+       for i in $(test_seq 1 256); do
+               for j in 1 2 3 4 5; do
+                       echo $i-$j
+               done
+       done >file &&
+       git add file &&
+       git commit -m base &&
+
+       # one side changes the first line of each to "master"
+       sed s/-1/-master/ <file >tmp &&
+       mv tmp file &&
+       git commit -am master &&
+
+       # and the other to "side"; merging the two will
+       # yield 256 separate conflicts
+       git checkout -b side HEAD^ &&
+       sed s/-1/-side/ <file >tmp &&
+       mv tmp file &&
+       git commit -am side
+'
+
+test_expect_success 'merge detects mod-256 conflicts (recursive)' '
+       git reset --hard &&
+       test_must_fail git merge -s recursive master
+'
+
+test_expect_success 'merge detects mod-256 conflicts (resolve)' '
+       git reset --hard &&
+       test_must_fail git merge -s resolve master
+'
+
 test_done