#!/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/" B && sed -e "/^G /s/.*/G : colored branch changes a line/" 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/" 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