rerere: mention caveat about unmatched conflict markers
[gitweb.git] / t / t4200-rerere.sh
index eaf18c81cbffe012663fae3a537ef8302d6c7b31..819f6dd67291146a8fbc047399573ed151f8f465 100755 (executable)
@@ -243,7 +243,7 @@ rerere_gc_custom_expiry_test () {
        five_days="$1" right_now="$2"
        test_expect_success "rerere gc with custom expiry ($five_days, $right_now)" '
                rm -fr .git/rr-cache &&
-               rr=.git/rr-cache/$_z40 &&
+               rr=.git/rr-cache/$ZERO_OID &&
                mkdir -p "$rr" &&
                >"$rr/preimage" &&
                >"$rr/postimage" &&
@@ -580,4 +580,69 @@ test_expect_success 'multiple identical conflicts' '
        count_pre_post 0 0
 '
 
+test_expect_success 'rerere with unexpected conflict markers does not crash' '
+       git reset --hard &&
+
+       git checkout -b branch-1 master &&
+       echo "bar" >test &&
+       git add test &&
+       git commit -q -m two &&
+
+       git reset --hard &&
+       git checkout -b branch-2 master &&
+       echo "foo" >test &&
+       git add test &&
+       git commit -q -a -m one &&
+
+       test_must_fail git merge branch-1 &&
+       echo "<<<<<<< a" >test &&
+       git rerere &&
+
+       git rerere clear
+'
+
+test_expect_success 'rerere with inner conflict markers' '
+       git reset --hard &&
+
+       git checkout -b A master &&
+       echo "bar" >test &&
+       git add test &&
+       git commit -q -m two &&
+       echo "baz" >test &&
+       git add test &&
+       git commit -q -m three &&
+
+       git reset --hard &&
+       git checkout -b B master &&
+       echo "foo" >test &&
+       git add test &&
+       git commit -q -a -m one &&
+
+       test_must_fail git merge A~ &&
+       git add test &&
+       git commit -q -m "will solve conflicts later" &&
+       test_must_fail git merge A &&
+
+       echo "resolved" >test &&
+       git add test &&
+       git commit -q -m "solved conflict" &&
+
+       echo "resolved" >expect &&
+
+       git reset --hard HEAD~~ &&
+       test_must_fail git merge A~ &&
+       git add test &&
+       git commit -q -m "will solve conflicts later" &&
+       test_must_fail git merge A &&
+       cat test >actual &&
+       test_cmp expect actual &&
+
+       git add test &&
+       git commit -m "rerere solved conflict" &&
+       git reset --hard HEAD~ &&
+       test_must_fail git merge A &&
+       cat test >actual &&
+       test_cmp expect actual
+'
+
 test_done