Merge branch 'ag/patch-header-verify'
[gitweb.git] / t / t3030-merge-recursive.sh
index aef92b9b920874eb42b97ee72427935610be4e75..9929f82021deeb20358016b487400b80e27b596f 100755 (executable)
@@ -9,12 +9,12 @@ test_expect_success 'setup 1' '
        echo hello >a &&
        o0=$(git hash-object a) &&
        cp a b &&
-       cp a A &&
+       cp a c &&
        mkdir d &&
        cp a d/e &&
 
        test_tick &&
-       git add a b A d/e &&
+       git add a b c d/e &&
        git commit -m initial &&
        c0=$(git rev-parse --verify HEAD) &&
        git branch side &&
@@ -34,34 +34,34 @@ test_expect_success 'setup 1' '
        c1=$(git rev-parse --verify HEAD) &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o1   a"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o1   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o1 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 '
 
 test_expect_success 'setup 2' '
 
-       rm -rf [Aabd] &&
+       rm -rf [abcd] &&
        git checkout side &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o0   a"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o0 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual &&
+       test_cmp expected actual &&
 
        echo goodbye >>a &&
        o2=$(git hash-object a) &&
@@ -73,34 +73,34 @@ test_expect_success 'setup 2' '
        c2=$(git rev-parse --verify HEAD) &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o2   a"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o2 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 '
 
 test_expect_success 'setup 3' '
 
-       rm -rf [Aabd] &&
+       rm -rf [abcd] &&
        git checkout df-1 &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o0   a"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o0 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual &&
+       test_cmp expected actual &&
 
        rm -f b && mkdir b && echo df-1 >b/c && git add b/c &&
        o3=$(git hash-object b/c) &&
@@ -110,34 +110,34 @@ test_expect_success 'setup 3' '
        c3=$(git rev-parse --verify HEAD) &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o0   a"
                echo "100644 blob $o3   b/c"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o0 0      a"
                echo "100644 $o3 0      b/c"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 '
 
 test_expect_success 'setup 4' '
 
-       rm -rf [Aabd] &&
+       rm -rf [abcd] &&
        git checkout df-2 &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o0   a"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o0 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual &&
+       test_cmp expected actual &&
 
        rm -f a && mkdir a && echo df-2 >a/c && git add a/c &&
        o4=$(git hash-object a/c) &&
@@ -147,34 +147,34 @@ test_expect_success 'setup 4' '
        c4=$(git rev-parse --verify HEAD) &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o4   a/c"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o4 0      a/c"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 '
 
 test_expect_success 'setup 5' '
 
-       rm -rf [Aabd] &&
+       rm -rf [abcd] &&
        git checkout remove &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o0   a"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o0 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual &&
+       test_cmp expected actual &&
 
        rm -f b &&
        echo remove-conflict >a &&
@@ -188,33 +188,33 @@ test_expect_success 'setup 5' '
        c5=$(git rev-parse --verify HEAD) &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o5   a"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o5 0      a"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
 test_expect_success 'setup 6' '
 
-       rm -rf [Aabd] &&
+       rm -rf [abcd] &&
        git checkout df-3 &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o0   a"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o0   d/e"
-               echo "100644 $o0 0      A"
                echo "100644 $o0 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o0 0      d/e"
        ) >expected &&
-       git diff -u expected actual &&
+       test_cmp expected actual &&
 
        rm -fr d && echo df-3 >d && git add d &&
        o6=$(git hash-object d) &&
@@ -224,24 +224,24 @@ test_expect_success 'setup 6' '
        c6=$(git rev-parse --verify HEAD) &&
        ( git ls-tree -r HEAD ; git ls-files -s ) >actual &&
        (
-               echo "100644 blob $o0   A"
                echo "100644 blob $o0   a"
                echo "100644 blob $o0   b"
+               echo "100644 blob $o0   c"
                echo "100644 blob $o6   d"
-               echo "100644 $o0 0      A"
                echo "100644 $o0 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o6 0      d"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 '
 
 test_expect_success 'merge-recursive simple' '
 
-       rm -fr [Aabd] &&
+       rm -fr [abcd] &&
        git checkout -f "$c2" &&
 
-       git-merge-recursive "$c0" -- "$c2" "$c1"
+       git merge-recursive "$c0" -- "$c2" "$c1"
        status=$?
        case "$status" in
        1)
@@ -258,23 +258,39 @@ test_expect_success 'merge-recursive result' '
 
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
                echo "100644 $o0 1      a"
                echo "100644 $o2 2      a"
                echo "100644 $o1 3      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
+test_expect_success 'fail if the index has unresolved entries' '
+
+       rm -fr [abcd] &&
+       git checkout -f "$c1" &&
+
+       test_must_fail git merge "$c5" &&
+       test_must_fail git merge "$c5" 2> out &&
+       grep "not possible because you have unmerged files" out &&
+       git add -u &&
+       test_must_fail git merge "$c5" 2> out &&
+       grep "You have not concluded your merge" out &&
+       rm -f .git/MERGE_HEAD &&
+       test_must_fail git merge "$c5" 2> out &&
+       grep "Your local changes to .* would be overwritten by merge." out
+'
+
 test_expect_success 'merge-recursive remove conflict' '
 
-       rm -fr [Aabd] &&
+       rm -fr [abcd] &&
        git checkout -f "$c1" &&
 
-       git-merge-recursive "$c0" -- "$c1" "$c5"
+       git merge-recursive "$c0" -- "$c1" "$c5"
        status=$?
        case "$status" in
        1)
@@ -291,44 +307,44 @@ test_expect_success 'merge-recursive remove conflict' '
 
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
                echo "100644 $o0 1      a"
                echo "100644 $o1 2      a"
                echo "100644 $o5 3      a"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
 test_expect_success 'merge-recursive d/f simple' '
-       rm -fr [Aabd] &&
+       rm -fr [abcd] &&
        git reset --hard &&
        git checkout -f "$c1" &&
 
-       git-merge-recursive "$c0" -- "$c1" "$c3"
+       git merge-recursive "$c0" -- "$c1" "$c3"
 '
 
 test_expect_success 'merge-recursive result' '
 
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
                echo "100644 $o1 0      a"
                echo "100644 $o3 0      b/c"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
 test_expect_success 'merge-recursive d/f conflict' '
 
-       rm -fr [Aabd] &&
+       rm -fr [abcd] &&
        git reset --hard &&
        git checkout -f "$c1" &&
 
-       git-merge-recursive "$c0" -- "$c1" "$c4"
+       git merge-recursive "$c0" -- "$c1" "$c4"
        status=$?
        case "$status" in
        1)
@@ -345,24 +361,24 @@ test_expect_success 'merge-recursive d/f conflict result' '
 
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
                echo "100644 $o0 1      a"
                echo "100644 $o1 2      a"
                echo "100644 $o4 0      a/c"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
 test_expect_success 'merge-recursive d/f conflict the other way' '
 
-       rm -fr [Aabd] &&
+       rm -fr [abcd] &&
        git reset --hard &&
        git checkout -f "$c4" &&
 
-       git-merge-recursive "$c0" -- "$c4" "$c1"
+       git merge-recursive "$c0" -- "$c4" "$c1"
        status=$?
        case "$status" in
        1)
@@ -379,24 +395,24 @@ test_expect_success 'merge-recursive d/f conflict result the other way' '
 
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
                echo "100644 $o0 1      a"
                echo "100644 $o1 3      a"
                echo "100644 $o4 0      a/c"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
 test_expect_success 'merge-recursive d/f conflict' '
 
-       rm -fr [Aabd] &&
+       rm -fr [abcd] &&
        git reset --hard &&
        git checkout -f "$c1" &&
 
-       git-merge-recursive "$c0" -- "$c1" "$c6"
+       git merge-recursive "$c0" -- "$c1" "$c6"
        status=$?
        case "$status" in
        1)
@@ -413,24 +429,24 @@ test_expect_success 'merge-recursive d/f conflict result' '
 
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
                echo "100644 $o1 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o6 3      d"
                echo "100644 $o0 1      d/e"
                echo "100644 $o1 2      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
 test_expect_success 'merge-recursive d/f conflict' '
 
-       rm -fr [Aabd] &&
+       rm -fr [abcd] &&
        git reset --hard &&
        git checkout -f "$c6" &&
 
-       git-merge-recursive "$c0" -- "$c6" "$c1"
+       git merge-recursive "$c0" -- "$c6" "$c1"
        status=$?
        case "$status" in
        1)
@@ -447,14 +463,14 @@ test_expect_success 'merge-recursive d/f conflict result' '
 
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
                echo "100644 $o1 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o6 2      d"
                echo "100644 $o0 1      d/e"
                echo "100644 $o1 3      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -471,58 +487,68 @@ test_expect_success 'reset and bind merge' '
        git read-tree --prefix=M/ master &&
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
-               echo "100644 $o0 0      M/A"
                echo "100644 $o1 0      M/a"
                echo "100644 $o0 0      M/b"
+               echo "100644 $o0 0      M/c"
                echo "100644 $o1 0      M/d/e"
                echo "100644 $o1 0      a"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       git diff -u expected actual &&
+       test_cmp expected actual &&
 
        git read-tree --prefix=a1/ master &&
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
-               echo "100644 $o0 0      M/A"
                echo "100644 $o1 0      M/a"
                echo "100644 $o0 0      M/b"
+               echo "100644 $o0 0      M/c"
                echo "100644 $o1 0      M/d/e"
                echo "100644 $o1 0      a"
-               echo "100644 $o0 0      a1/A"
                echo "100644 $o1 0      a1/a"
                echo "100644 $o0 0      a1/b"
+               echo "100644 $o0 0      a1/c"
                echo "100644 $o1 0      a1/d/e"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
        git read-tree --prefix=z/ master &&
        git ls-files -s >actual &&
        (
-               echo "100644 $o0 0      A"
-               echo "100644 $o0 0      M/A"
                echo "100644 $o1 0      M/a"
                echo "100644 $o0 0      M/b"
+               echo "100644 $o0 0      M/c"
                echo "100644 $o1 0      M/d/e"
                echo "100644 $o1 0      a"
-               echo "100644 $o0 0      a1/A"
                echo "100644 $o1 0      a1/a"
                echo "100644 $o0 0      a1/b"
+               echo "100644 $o0 0      a1/c"
                echo "100644 $o1 0      a1/d/e"
                echo "100644 $o0 0      b"
+               echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
-               echo "100644 $o0 0      z/A"
                echo "100644 $o1 0      z/a"
                echo "100644 $o0 0      z/b"
+               echo "100644 $o0 0      z/c"
                echo "100644 $o1 0      z/d/e"
        ) >expected &&
-       git diff -u expected actual
+       test_cmp expected actual
 
 '
 
-test_done
+test_expect_success 'merge removes empty directories' '
 
+       git reset --hard master &&
+       git checkout -b rm &&
+       git rm d/e &&
+       git commit -mremoved-d/e &&
+       git checkout master &&
+       git merge -s recursive rm &&
+       test_must_fail test -d d
+'
+
+test_done