#!/bin/sh global test_description := ''Merge-recursive merging renames'' source ./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 && test_path_is_file B && test_path_is_file N && test_path_is_file R && test_path_is_missing A && test_path_is_missing M ' # 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 && test_path_is_file A && echo dirty >expect && test_cmp expect A && test_path_is_file B && test_path_is_file N && test_path_is_missing M ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"Merge-recursive merging renames">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"cat >A <<\\EOF &&\n"> <"a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"> <"b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"> <"c cccccccccccccccccccccccccccccccccccccccccccccccc\n"> <"d dddddddddddddddddddddddddddddddddddddddddddddddd\n"> <"e eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n"> <"f ffffffffffffffffffffffffffffffffffffffffffffffff\n"> <"g gggggggggggggggggggggggggggggggggggggggggggggggg\n"> <"h hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\n"> <"i iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n"> <"j jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj\n"> <"k kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk\n"> <"l llllllllllllllllllllllllllllllllllllllllllllllll\n"> <"m mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\n"> <"n nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\n"> <"o oooooooooooooooooooooooooooooooooooooooooooooooo\n"> <"EOF\n"> <"\n"> <"cat >M <<\\EOF &&\n"> <"A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"> <"B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n"> <"C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\n"> <"D DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\n"> <"E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n"> <"F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n"> <"G GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG\n"> <"H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n"> <"I IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\n"> <"J JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ\n"> <"K KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\n"> <"L LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n"> <"M MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n"> <"N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN\n"> <"O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO\n"> <"EOF\n"> <"\n"> <"git add A M &&\n"> <"git commit -m \"initial has A and M\" &&\n"> <"git branch white &&\n"> <"git branch red &&\n"> <"git branch blue &&\n"> <"\n"> <"git checkout white &&\n"> <"sed -e \"/^g /s/.*/g : white changes a line/\" B &&\n"> <"sed -e \"/^G /s/.*/G : colored branch changes a line/\" N &&\n"> <"rm -f A M &&\n"> <"git update-index --add --remove A B M N &&\n"> <"git commit -m \"white renames A->B, M->N\" &&\n"> <"\n"> <"git checkout red &&\n"> <"echo created by red >R &&\n"> <"git update-index --add R &&\n"> <"git commit -m \"red creates R\" &&\n"> <"\n"> <"git checkout blue &&\n"> <"sed -e \"/^o /s/.*/g : blue changes a line/\" B &&\n"> <"rm -f A &&\n"> <"mv B A &&\n"> <"git update-index A &&\n"> <"git commit -m \"blue modify A\" &&\n"> <"\n"> <"git checkout master"> ) } ) (C {(test_expect_success)} {(SQ <"merge white into red (A->B,M->N)">)} { (SQ <"\n"> <"\tgit checkout -b red-white red &&\n"> <"\tgit merge white &&\n"> <"\tgit write-tree &&\n"> <"\ttest_path_is_file B &&\n"> <"\ttest_path_is_file N &&\n"> <"\ttest_path_is_file R &&\n"> <"\ttest_path_is_missing A &&\n"> <"\ttest_path_is_missing M\n"> ) } ) (C {(test_expect_success)} {(SQ <"merge blue into white (A->B, mod A, A untracked)">)} { (SQ <"\n"> <"\tgit checkout -b white-blue white &&\n"> <"\techo dirty >A &&\n"> <"\tgit merge blue &&\n"> <"\tgit write-tree &&\n"> <"\ttest_path_is_file A &&\n"> <"\techo dirty >expect &&\n"> <"\ttest_cmp expect A &&\n"> <"\ttest_path_is_file B &&\n"> <"\ttest_path_is_file N &&\n"> <"\ttest_path_is_missing M\n"> ) } ) (C {(test_done)}) ] )