| #!/bin/sh |
| |
| test_description='Merge-recursive merging renames' |
| . ./test-lib.sh |
| |
| test_expect_success setup \ |
| ' |
| cat >A <<\EOF && |
| a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb |
| c cccccccccccccccccccccccccccccccccccccccccccccccc |
| d dddddddddddddddddddddddddddddddddddddddddddddddd |
| e eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee |
| f ffffffffffffffffffffffffffffffffffffffffffffffff |
| g gggggggggggggggggggggggggggggggggggggggggggggggg |
| h hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh |
| i iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii |
| j jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj |
| k kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk |
| l llllllllllllllllllllllllllllllllllllllllllllllll |
| m mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm |
| n nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn |
| o oooooooooooooooooooooooooooooooooooooooooooooooo |
| EOF |
| |
| cat >M <<\EOF && |
| A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
| B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB |
| C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC |
| D DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD |
| E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE |
| F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
| G GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG |
| H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH |
| I IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII |
| J JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ |
| K KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK |
| L LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL |
| M MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM |
| N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN |
| O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO |
| EOF |
| |
| git add A M && |
| git commit -m "initial has A and M" && |
| git branch white && |
| git branch red && |
| git branch blue && |
| |
| git checkout white && |
| sed -e "/^g /s/.*/g : white changes a line/" <A >B && |
| sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N && |
| rm -f A M && |
| git update-index --add --remove A B M N && |
| git commit -m "white renames A->B, M->N" && |
| |
| git checkout red && |
| echo created by red >R && |
| git update-index --add R && |
| git commit -m "red creates R" && |
| |
| git checkout blue && |
| sed -e "/^o /s/.*/g : blue changes a line/" <A >B && |
| rm -f A && |
| mv B A && |
| git update-index A && |
| git commit -m "blue modify A" && |
| |
| git checkout master' |
| |
| # This test broke in 65ac6e9c3f47807cb603af07a6a9e1a43bc119ae |
| test_expect_success 'merge white into red (A->B,M->N)' \ |
| ' |
| git checkout -b red-white red && |
| git merge white && |
| git write-tree >/dev/null || { |
| echo "BAD: merge did not complete" |
| return 1 |
| } |
| |
| test -f B || { |
| echo "BAD: B does not exist in working directory" |
| return 1 |
| } |
| test -f N || { |
| echo "BAD: N does not exist in working directory" |
| return 1 |
| } |
| test -f R || { |
| echo "BAD: R does not exist in working directory" |
| return 1 |
| } |
| |
| test -f A && { |
| echo "BAD: A still exists in working directory" |
| return 1 |
| } |
| test -f M && { |
| echo "BAD: M still exists in working directory" |
| return 1 |
| } |
| return 0 |
| ' |
| |
| # This test broke in 8371234ecaaf6e14fe3f2082a855eff1bbd79ae9 |
| test_expect_success 'merge blue into white (A->B, mod A, A untracked)' \ |
| ' |
| git checkout -b white-blue white && |
| echo dirty >A && |
| git merge blue && |
| git write-tree >/dev/null || { |
| echo "BAD: merge did not complete" |
| return 1 |
| } |
| |
| test -f A || { |
| echo "BAD: A does not exist in working directory" |
| return 1 |
| } |
| test `cat A` = dirty || { |
| echo "BAD: A content is wrong" |
| return 1 |
| } |
| test -f B || { |
| echo "BAD: B does not exist in working directory" |
| return 1 |
| } |
| test -f N || { |
| echo "BAD: N does not exist in working directory" |
| return 1 |
| } |
| test -f M && { |
| echo "BAD: M still exists in working directory" |
| return 1 |
| } |
| return 0 |
| ' |
| |
| test_done |