(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'Merge-recursive merging renames' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: modify body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(sed)} {(-e)} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:30) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$2'))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:35) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$2') (.x))} ) ] ) (C {(mv)} {(DQ ($ Id.VSub_Number '$2') (.x))} {(DQ ($ Id.VSub_Number '$2'))}) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:64) (Token id:Id.Lit_Chars val:'cat >A <<\\EOF &&\n' span_id:65) (Token id:Id.Lit_Chars val:'a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n' span_id:66) (Token id: Id.Lit_Chars val: 'b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n' span_id: 67 ) (Token id:Id.Lit_Chars val:'c cccccccccccccccccccccccccccccccccccccccccccccccc\n' span_id:68) (Token id: Id.Lit_Chars val: 'd dddddddddddddddddddddddddddddddddddddddddddddddd\n' span_id: 69 ) (Token id:Id.Lit_Chars val:'e eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n' span_id:70) (Token id: Id.Lit_Chars val: 'f ffffffffffffffffffffffffffffffffffffffffffffffff\n' span_id: 71 ) (Token id:Id.Lit_Chars val:'g gggggggggggggggggggggggggggggggggggggggggggggggg\n' span_id:72) (Token id: Id.Lit_Chars val: 'h hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\n' span_id: 73 ) (Token id:Id.Lit_Chars val:'i iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n' span_id:74) (Token id: Id.Lit_Chars val: 'j jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj\n' span_id: 75 ) (Token id:Id.Lit_Chars val:'k kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk\n' span_id:76) (Token id: Id.Lit_Chars val: 'l llllllllllllllllllllllllllllllllllllllllllllllll\n' span_id: 77 ) (Token id:Id.Lit_Chars val:'m mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\n' span_id:78) (Token id: Id.Lit_Chars val: 'n nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\n' span_id: 79 ) (Token id:Id.Lit_Chars val:'o oooooooooooooooooooooooooooooooooooooooooooooooo\n' span_id:80) (Token id:Id.Lit_Chars val:'EOF\n' span_id:81) (Token id:Id.Lit_Chars val:'\n' span_id:82) (Token id:Id.Lit_Chars val:'cat >M <<\\EOF &&\n' span_id:83) (Token id:Id.Lit_Chars val:'A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n' span_id:84) (Token id: Id.Lit_Chars val: 'B BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\n' span_id: 85 ) (Token id:Id.Lit_Chars val:'C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\n' span_id:86) (Token id: Id.Lit_Chars val: 'D DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\n' span_id: 87 ) (Token id:Id.Lit_Chars val:'E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n' span_id:88) (Token id: Id.Lit_Chars val: 'F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n' span_id: 89 ) (Token id:Id.Lit_Chars val:'G GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG\n' span_id:90) (Token id: Id.Lit_Chars val: 'H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\n' span_id: 91 ) (Token id:Id.Lit_Chars val:'I IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\n' span_id:92) (Token id: Id.Lit_Chars val: 'J JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ\n' span_id: 93 ) (Token id:Id.Lit_Chars val:'K KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\n' span_id:94) (Token id: Id.Lit_Chars val: 'L LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL\n' span_id: 95 ) (Token id:Id.Lit_Chars val:'M MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\n' span_id:96) (Token id: Id.Lit_Chars val: 'N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN\n' span_id: 97 ) (Token id:Id.Lit_Chars val:'O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO\n' span_id:98) (Token id:Id.Lit_Chars val:'EOF\n' span_id:99) (Token id:Id.Lit_Chars val:'\n' span_id:100) (Token id:Id.Lit_Chars val:'git add A M &&\n' span_id:101) (Token id:Id.Lit_Chars val:'git commit -m "initial has A and M" &&\n' span_id:102) (Token id:Id.Lit_Chars val:'git branch white &&\n' span_id:103) (Token id:Id.Lit_Chars val:'git branch red &&\n' span_id:104) (Token id:Id.Lit_Chars val:'git branch blue &&\n' span_id:105) (Token id:Id.Lit_Chars val:'git branch yellow &&\n' span_id:106) (Token id:Id.Lit_Chars val:'git branch change &&\n' span_id:107) (Token id:Id.Lit_Chars val:'git branch change+rename &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\n' span_id:109) (Token id:Id.Lit_Chars val:'sed -e "/^g /s/.*/g : master changes a line/" <A >A+ &&\n' span_id:110) (Token id:Id.Lit_Chars val:'mv A+ A &&\n' span_id:111) (Token id:Id.Lit_Chars val:'git commit -a -m "master updates A" &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\n' span_id:113) (Token id:Id.Lit_Chars val:'git checkout yellow &&\n' span_id:114) (Token id:Id.Lit_Chars val:'rm -f M &&\n' span_id:115) (Token id:Id.Lit_Chars val:'git commit -a -m "yellow removes M" &&\n' span_id:116) (Token id:Id.Lit_Chars val:'\n' span_id:117) (Token id:Id.Lit_Chars val:'git checkout white &&\n' span_id:118) (Token id: Id.Lit_Chars val: 'sed -e "/^g /s/.*/g : white changes a line/" <A >B &&\n' span_id: 119 ) (Token id: Id.Lit_Chars val: 'sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N &&\n' span_id: 120 ) (Token id:Id.Lit_Chars val:'rm -f A M &&\n' span_id:121) (Token id: Id.Lit_Chars val: 'git update-index --add --remove A B M N &&\n' span_id: 122 ) (Token id:Id.Lit_Chars val:'git commit -m "white renames A->B, M->N" &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\n' span_id:124) (Token id:Id.Lit_Chars val:'git checkout red &&\n' span_id:125) (Token id: Id.Lit_Chars val: 'sed -e "/^g /s/.*/g : red changes a line/" <A >B &&\n' span_id: 126 ) (Token id: Id.Lit_Chars val: 'sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N &&\n' span_id: 127 ) (Token id:Id.Lit_Chars val:'rm -f A M &&\n' span_id:128) (Token id: Id.Lit_Chars val: 'git update-index --add --remove A B M N &&\n' span_id: 129 ) (Token id:Id.Lit_Chars val:'git commit -m "red renames A->B, M->N" &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\n' span_id:131) (Token id:Id.Lit_Chars val:'git checkout blue &&\n' span_id:132) (Token id: Id.Lit_Chars val: 'sed -e "/^g /s/.*/g : blue changes a line/" <A >C &&\n' span_id: 133 ) (Token id: Id.Lit_Chars val: 'sed -e "/^G /s/.*/G : colored branch changes a line/" <M >N &&\n' span_id: 134 ) (Token id:Id.Lit_Chars val:'rm -f A M &&\n' span_id:135) (Token id: Id.Lit_Chars val: 'git update-index --add --remove A C M N &&\n' span_id: 136 ) (Token id:Id.Lit_Chars val:'git commit -m "blue renames A->C, M->N" &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\n' span_id:138) (Token id:Id.Lit_Chars val:'git checkout change &&\n' span_id:139) (Token id: Id.Lit_Chars val: 'sed -e "/^g /s/.*/g : changed line/" <A >A+ &&\n' span_id: 140 ) (Token id:Id.Lit_Chars val:'mv A+ A &&\n' span_id:141) (Token id:Id.Lit_Chars val:'git commit -q -a -m "changed" &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\n' span_id:143) (Token id:Id.Lit_Chars val:'git checkout change+rename &&\n' span_id:144) (Token id:Id.Lit_Chars val:'sed -e "/^g /s/.*/g : changed line/" <A >B &&\n' span_id:145) (Token id:Id.Lit_Chars val:'rm A &&\n' span_id:146) (Token id:Id.Lit_Chars val:'git update-index --add B &&\n' span_id:147) (Token id: Id.Lit_Chars val: 'git commit -q -a -m "changed and renamed" &&\n' span_id: 148 ) (Token id:Id.Lit_Chars val:'\n' span_id:149) (Token id:Id.Lit_Chars val:'git checkout master' span_id:150) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pull renaming branch into unrenaming one' span_id:157))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:162) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:163) (Token id:Id.Lit_Chars val:'\ttest_expect_code 1 git pull . white &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\tgit ls-files -s &&\n' span_id:165) (Token id:Id.Lit_Chars val:'\tgit ls-files -u B >b.stages &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\ttest_line_count = 3 b.stages &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit ls-files -s N >n.stages &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 n.stages &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\tsed -ne "/^g/{\n' span_id:170) (Token id:Id.Lit_Chars val:'\tp\n' span_id:171) (Token id:Id.Lit_Chars val:'\tq\n' span_id:172) (Token id:Id.Lit_Chars val:'\t}" B | grep master &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code white N\n' span_id:174) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pull renaming branch into another renaming one' span_id:181))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:186) (Token id:Id.Lit_Chars val:'\trm -f B &&\n' span_id:187) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:188) (Token id:Id.Lit_Chars val:'\tgit checkout red &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\ttest_expect_code 1 git pull . white &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit ls-files -u B >b.stages &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\ttest_line_count = 3 b.stages &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\tgit ls-files -s N >n.stages &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 n.stages &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tsed -ne "/^g/{\n' span_id:195) (Token id:Id.Lit_Chars val:'\tp\n' span_id:196) (Token id:Id.Lit_Chars val:'\tq\n' span_id:197) (Token id:Id.Lit_Chars val:'\t}" B | grep red &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code white N\n' span_id:199) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pull unrenaming branch into renaming one' span_id:206))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:211) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:213) (Token id: Id.Lit_Chars val: '\ttest_expect_code 1 git pull . master &&\n' span_id: 214 ) (Token id:Id.Lit_Chars val:'\tgit ls-files -u B >b.stages &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\ttest_line_count = 3 b.stages &&\n' span_id:216) (Token id:Id.Lit_Chars val:'\tgit ls-files -s N >n.stages &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 n.stages &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\tsed -ne "/^g/{\n' span_id:219) (Token id:Id.Lit_Chars val:'\tp\n' span_id:220) (Token id:Id.Lit_Chars val:'\tq\n' span_id:221) (Token id:Id.Lit_Chars val:'\t}" B | grep red &&\n' span_id:222) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code white N\n' span_id:223) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pull conflicting renames' span_id:230))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:235) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:236) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:237) (Token id: Id.Lit_Chars val: '\ttest_expect_code 1 git pull . blue &&\n' span_id: 238 ) (Token id:Id.Lit_Chars val:'\tgit ls-files -u A >a.stages &&\n' span_id:239) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 a.stages &&\n' span_id:240) (Token id:Id.Lit_Chars val:'\tgit ls-files -u B >b.stages &&\n' span_id:241) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 b.stages &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\tgit ls-files -u C >c.stages &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 c.stages &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\tgit ls-files -s N >n.stages &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 n.stages &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\tsed -ne "/^g/{\n' span_id:247) (Token id:Id.Lit_Chars val:'\tp\n' span_id:248) (Token id:Id.Lit_Chars val:'\tq\n' span_id:249) (Token id:Id.Lit_Chars val:'\t}" B | grep red &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code white N\n' span_id:251) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'interference with untracked working tree file' span_id:258))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:262) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:264) (Token id: Id.Lit_Chars val: '\techo >A this file should not matter &&\n' span_id: 265 ) (Token id:Id.Lit_Chars val:'\ttest_expect_code 1 git pull . white &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\ttest_path_is_file A\n' span_id:267) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'interference with untracked working tree file' span_id:274))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:278) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\tgit checkout white &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:281) (Token id:Id.Lit_Chars val:'\trm -f A &&\n' span_id:282) (Token id: Id.Lit_Chars val: '\techo >A this file should not matter &&\n' span_id: 283 ) (Token id:Id.Lit_Chars val:'\ttest_expect_code 1 git pull . red &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\ttest_path_is_file A\n' span_id:285) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'interference with untracked working tree file' span_id:292))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:296) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\trm -f A M &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\tgit checkout -f master &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tgit tag -f anchor &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\tgit pull . yellow &&\n' span_id:302) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing M &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\tgit reset --hard anchor\n' span_id:304) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'updated working tree file should prevent the merge' span_id: 311 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:315) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\trm -f A M &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\tgit checkout -f master &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\tgit tag -f anchor &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\techo >>M one line addition &&\n' span_id:321) (Token id:Id.Lit_Chars val:'\tcat M >M.saved &&\n' span_id:322) (Token id:Id.Lit_Chars val:'\ttest_expect_code 128 git pull . yellow &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\ttest_cmp M M.saved &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\trm -f M.saved\n' span_id:325) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'updated working tree file should prevent the merge' span_id: 332 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:336) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:337) (Token id:Id.Lit_Chars val:'\trm -f A M &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\tgit checkout -f master &&\n' span_id:339) (Token id:Id.Lit_Chars val:'\tgit tag -f anchor &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:341) (Token id:Id.Lit_Chars val:'\techo >>M one line addition &&\n' span_id:342) (Token id:Id.Lit_Chars val:'\tcat M >M.saved &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\tgit update-index M &&\n' span_id:344) (Token id: Id.Lit_Chars val: '\ttest_expect_code 128 git pull . yellow &&\n' span_id: 345 ) (Token id:Id.Lit_Chars val:'\ttest_cmp M M.saved &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\trm -f M.saved\n' span_id:347) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'interference with untracked working tree file' span_id:354))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:358) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\trm -f A M &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\tgit checkout -f yellow &&\n' span_id:361) (Token id:Id.Lit_Chars val:'\tgit tag -f anchor &&\n' span_id:362) (Token id:Id.Lit_Chars val:'\tgit show-branch &&\n' span_id:363) (Token id:Id.Lit_Chars val:'\techo >M this file should not matter &&\n' span_id:364) (Token id:Id.Lit_Chars val:'\tgit pull . master &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\ttest_path_is_file M &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\t! {\n' span_id:367) (Token id:Id.Lit_Chars val:'\t\tgit ls-files -s |\n' span_id:368) (Token id:Id.Lit_Chars val:'\t\tgrep M\n' span_id:369) (Token id:Id.Lit_Chars val:'\t} &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\tgit reset --hard anchor\n' span_id:371) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge of identical changes in a renamed file' span_id:378))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:382) (Token id:Id.Lit_Chars val:'\trm -f A M N &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\tgit checkout change+rename &&\n' span_id:385) (Token id: Id.Lit_Chars val: '\tGIT_MERGE_VERBOSITY=3 git merge change | test_i18ngrep "^Skipped B" &&\n' span_id: 386 ) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^ &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\tgit checkout change &&\n' span_id:388) (Token id: Id.Lit_Chars val: '\tGIT_MERGE_VERBOSITY=3 git merge change+rename | test_i18ngrep "^Skipped B"\n' span_id: 389 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for rename + d/f conflicts' span_id:396))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:400) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan dir-in-way &&\n' span_id:402) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:403) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:404) (Token id:Id.Lit_Chars val:'\n' span_id:405) (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:406) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:407) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n" >sub/file &&\n' span_id: 408 ) (Token id:Id.Lit_Chars val:'\techo foo >dir/file-in-the-way &&\n' span_id:409) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:410) (Token id:Id.Lit_Chars val:'\tgit commit -m "Common commit" &&\n' span_id:411) (Token id:Id.Lit_Chars val:'\n' span_id:412) (Token id:Id.Lit_Chars val:'\techo 11 >>sub/file &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\techo more >>dir/file-in-the-way &&\n' span_id:414) (Token id:Id.Lit_Chars val:'\tgit add -u &&\n' span_id:415) (Token id: Id.Lit_Chars val: '\tgit commit -m "Commit to merge, with dir in the way" &&\n' span_id: 416 ) (Token id:Id.Lit_Chars val:'\n' span_id:417) (Token id:Id.Lit_Chars val:'\tgit checkout -b dir-not-in-way &&\n' span_id:418) (Token id:Id.Lit_Chars val:'\tgit reset --soft HEAD^ &&\n' span_id:419) (Token id:Id.Lit_Chars val:'\tgit rm -rf dir &&\n' span_id:420) (Token id: Id.Lit_Chars val: '\tgit commit -m "Commit to merge, with dir removed" -- dir sub/file &&\n' span_id: 421 ) (Token id:Id.Lit_Chars val:'\n' span_id:422) (Token id: Id.Lit_Chars val: '\tgit checkout -b renamed-file-has-no-conflicts dir-in-way~1 &&\n' span_id: 423 ) (Token id:Id.Lit_Chars val:'\tgit rm -rf dir &&\n' span_id:424) (Token id:Id.Lit_Chars val:'\tgit rm sub/file &&\n' span_id:425) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5555\\n6\\n7\\n8\\n9\\n10\\n" >dir &&\n' span_id: 426 ) (Token id:Id.Lit_Chars val:'\tgit add dir &&\n' span_id:427) (Token id: Id.Lit_Chars val: '\tgit commit -m "Independent change" &&\n' span_id: 428 ) (Token id:Id.Lit_Chars val:'\n' span_id:429) (Token id: Id.Lit_Chars val: '\tgit checkout -b renamed-file-has-conflicts dir-in-way~1 &&\n' span_id: 430 ) (Token id:Id.Lit_Chars val:'\tgit rm -rf dir &&\n' span_id:431) (Token id:Id.Lit_Chars val:'\tgit mv sub/file dir &&\n' span_id:432) (Token id:Id.Lit_Chars val:'\techo 12 >>dir &&\n' span_id:433) (Token id:Id.Lit_Chars val:'\tgit add dir &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\tgit commit -m "Conflicting change"\n' span_id:435) ) } ) (command.Simple words: [ {(printf)} { (DQ (1) (Id.Lit_Other '\\') (n2) (Id.Lit_Other '\\') (n3) (Id.Lit_Other '\\') (n4) (Id.Lit_Other '\\') (n5555) (Id.Lit_Other '\\') (n6) (Id.Lit_Other '\\') (n7) (Id.Lit_Other '\\') (n8) (Id.Lit_Other '\\') (n9) (Id.Lit_Other '\\') (n10) (Id.Lit_Other '\\') (n11) (Id.Lit_Other '\\') (n) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:467) fd: -1 arg_word: {(expected)} ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Rename+D/F conflict; renamed file merges + dir not in way' span_id: 474 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:478) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:479) (Token id:Id.Lit_Chars val:'\tgit checkout -q renamed-file-has-no-conflicts^0 &&\n' span_id:480) (Token id: Id.Lit_Chars val: '\tgit merge --strategy=recursive dir-not-in-way &&\n' span_id: 481 ) (Token id:Id.Lit_Chars val:'\tgit diff --quiet &&\n' span_id:482) (Token id:Id.Lit_Chars val:'\ttest -f dir &&\n' span_id:483) (Token id:Id.Lit_Chars val:'\ttest_cmp expected dir\n' span_id:484) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Rename+D/F conflict; renamed file merges but dir in way' span_id: 491 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:495) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:496) (Token id:Id.Lit_Chars val:'\trm -rf dir~* &&\n' span_id:497) (Token id: Id.Lit_Chars val: '\tgit checkout -q renamed-file-has-no-conflicts^0 &&\n' span_id: 498 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive dir-in-way >output &&\n' span_id: 499 ) (Token id:Id.Lit_Chars val:'\n' span_id:500) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "CONFLICT (modify/delete): dir/file-in-the-way" output &&\n' span_id: 501 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Auto-merging dir" output &&\n' span_id:502) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Adding as dir~HEAD instead" output &&\n' span_id: 503 ) (Token id:Id.Lit_Chars val:'\n' span_id:504) (Token id: Id.Lit_Chars val: '\ttest 3 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 505 ) (Token id: Id.Lit_Chars val: '\ttest 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&\n' span_id: 506 ) (Token id:Id.Lit_Chars val:'\n' span_id:507) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --quiet &&\n' span_id:508) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --cached --quiet &&\n' span_id:509) (Token id:Id.Lit_Chars val:'\n' span_id:510) (Token id:Id.Lit_Chars val:'\ttest -f dir/file-in-the-way &&\n' span_id:511) (Token id:Id.Lit_Chars val:'\ttest -f dir~HEAD &&\n' span_id:512) (Token id:Id.Lit_Chars val:'\ttest_cmp expected dir~HEAD\n' span_id:513) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Same as previous, but merged other way' span_id:520))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:524) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:525) (Token id:Id.Lit_Chars val:'\trm -rf dir~* &&\n' span_id:526) (Token id:Id.Lit_Chars val:'\tgit checkout -q dir-in-way^0 &&\n' span_id:527) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive renamed-file-has-no-conflicts >output 2>errors &&\n' span_id: 528 ) (Token id:Id.Lit_Chars val:'\n' span_id:529) (Token id: Id.Lit_Chars val: '\t! grep "error: refusing to lose untracked file at" errors &&\n' span_id: 530 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "CONFLICT (modify/delete): dir/file-in-the-way" output &&\n' span_id: 531 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Auto-merging dir" output &&\n' span_id:532) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Adding as dir~renamed-file-has-no-conflicts instead" output &&\n' span_id: 533 ) (Token id:Id.Lit_Chars val:'\n' span_id:534) (Token id: Id.Lit_Chars val: '\ttest 3 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 535 ) (Token id: Id.Lit_Chars val: '\ttest 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&\n' span_id: 536 ) (Token id:Id.Lit_Chars val:'\n' span_id:537) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --quiet &&\n' span_id:538) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --cached --quiet &&\n' span_id:539) (Token id:Id.Lit_Chars val:'\n' span_id:540) (Token id:Id.Lit_Chars val:'\ttest -f dir/file-in-the-way &&\n' span_id:541) (Token id: Id.Lit_Chars val: '\ttest -f dir~renamed-file-has-no-conflicts &&\n' span_id: 542 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected dir~renamed-file-has-no-conflicts\n' span_id:543) ) } ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:549) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:552) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:553)) (OF) } here_end_span_id: 573 stdin_parts: [ ('1\n') ('2\n') ('3\n') ('4\n') ('5\n') ('6\n') ('7\n') ('8\n') ('9\n') ('10\n') ('<<<<<<< HEAD:dir\n') ('12\n') ('=======\n') ('11\n') ('>>>>>>> dir-not-in-way:sub/file\n') ] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Rename+D/F conflict; renamed file cannot merge, dir not in way' span_id: 578 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:582) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:583) (Token id:Id.Lit_Chars val:'\trm -rf dir~* &&\n' span_id:584) (Token id: Id.Lit_Chars val: '\tgit checkout -q renamed-file-has-conflicts^0 &&\n' span_id: 585 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive dir-not-in-way &&\n' span_id: 586 ) (Token id:Id.Lit_Chars val:'\n' span_id:587) (Token id: Id.Lit_Chars val: '\ttest 3 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 588 ) (Token id:Id.Lit_Chars val:'\ttest 3 -eq "$(git ls-files -u dir | wc -l)" &&\n' span_id:589) (Token id:Id.Lit_Chars val:'\n' span_id:590) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --quiet &&\n' span_id:591) (Token id: Id.Lit_Chars val: '\ttest_must_fail git diff --cached --quiet &&\n' span_id: 592 ) (Token id:Id.Lit_Chars val:'\n' span_id:593) (Token id:Id.Lit_Chars val:'\ttest -f dir &&\n' span_id:594) (Token id:Id.Lit_Chars val:'\ttest_cmp expected dir\n' span_id:595) ) } ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Rename+D/F conflict; renamed file cannot merge and dir in the way' span_id: 602 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:606) (Token id: Id.Lit_Chars val: '\tmodify s/dir-not-in-way/dir-in-way/ expected &&\n' span_id: 607 ) (Token id:Id.Lit_Chars val:'\n' span_id:608) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:609) (Token id:Id.Lit_Chars val:'\trm -rf dir~* &&\n' span_id:610) (Token id: Id.Lit_Chars val: '\tgit checkout -q renamed-file-has-conflicts^0 &&\n' span_id: 611 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive dir-in-way &&\n' span_id: 612 ) (Token id:Id.Lit_Chars val:'\n' span_id:613) (Token id: Id.Lit_Chars val: '\ttest 5 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 614 ) (Token id: Id.Lit_Chars val: '\ttest 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" &&\n' span_id: 615 ) (Token id: Id.Lit_Chars val: '\ttest 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&\n' span_id: 616 ) (Token id:Id.Lit_Chars val:'\n' span_id:617) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --quiet &&\n' span_id:618) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --cached --quiet &&\n' span_id:619) (Token id:Id.Lit_Chars val:'\n' span_id:620) (Token id:Id.Lit_Chars val:'\ttest -f dir/file-in-the-way &&\n' span_id:621) (Token id:Id.Lit_Chars val:'\ttest -f dir~HEAD &&\n' span_id:622) (Token id:Id.Lit_Chars val:'\ttest_cmp expected dir~HEAD\n' span_id:623) ) } ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:629) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:632) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:633)) (OF) } here_end_span_id: 653 stdin_parts: [ ('1\n') ('2\n') ('3\n') ('4\n') ('5\n') ('6\n') ('7\n') ('8\n') ('9\n') ('10\n') ('<<<<<<< HEAD:sub/file\n') ('11\n') ('=======\n') ('12\n') ('>>>>>>> renamed-file-has-conflicts:dir\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Same as previous, but merged other way' span_id:658))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:662) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:663) (Token id:Id.Lit_Chars val:'\trm -rf dir~* &&\n' span_id:664) (Token id: Id.Lit_Chars val: '\tgit checkout -q dir-in-way^0 &&\n' span_id: 665 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive renamed-file-has-conflicts &&\n' span_id: 666 ) (Token id:Id.Lit_Chars val:'\n' span_id:667) (Token id: Id.Lit_Chars val: '\ttest 5 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 668 ) (Token id: Id.Lit_Chars val: '\ttest 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" &&\n' span_id: 669 ) (Token id: Id.Lit_Chars val: '\ttest 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&\n' span_id: 670 ) (Token id:Id.Lit_Chars val:'\n' span_id:671) (Token id: Id.Lit_Chars val: '\ttest_must_fail git diff --quiet &&\n' span_id: 672 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --cached --quiet &&\n' span_id:673) (Token id:Id.Lit_Chars val:'\n' span_id:674) (Token id:Id.Lit_Chars val:'\ttest -f dir/file-in-the-way &&\n' span_id:675) (Token id: Id.Lit_Chars val: '\ttest -f dir~renamed-file-has-conflicts &&\n' span_id: 676 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected dir~renamed-file-has-conflicts\n' span_id:677) ) } ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup both rename source and destination involved in D/F conflict' span_id: 684 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:688) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:689) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan rename-dest &&\n' span_id:690) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:691) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:692) (Token id:Id.Lit_Chars val:'\n' span_id:693) (Token id:Id.Lit_Chars val:'\tmkdir one &&\n' span_id:694) (Token id:Id.Lit_Chars val:'\techo stuff >one/file &&\n' span_id:695) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:696) (Token id:Id.Lit_Chars val:'\tgit commit -m "Common commit" &&\n' span_id:697) (Token id:Id.Lit_Chars val:'\n' span_id:698) (Token id:Id.Lit_Chars val:'\tgit mv one/file destdir &&\n' span_id:699) (Token id:Id.Lit_Chars val:'\tgit commit -m "Renamed to destdir" &&\n' span_id:700) (Token id:Id.Lit_Chars val:'\n' span_id:701) (Token id:Id.Lit_Chars val:'\tgit checkout -b source-conflict HEAD~1 &&\n' span_id:702) (Token id:Id.Lit_Chars val:'\tgit rm -rf one &&\n' span_id:703) (Token id:Id.Lit_Chars val:'\tmkdir destdir &&\n' span_id:704) (Token id:Id.Lit_Chars val:'\ttouch one destdir/foo &&\n' span_id:705) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:706) (Token id: Id.Lit_Chars val: '\tgit commit -m "Conflicts in the way"\n' span_id: 707 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'both rename source and destination involved in D/F conflict' span_id: 714 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:718) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:719) (Token id:Id.Lit_Chars val:'\trm -rf dir~* &&\n' span_id:720) (Token id:Id.Lit_Chars val:'\tgit checkout -q rename-dest^0 &&\n' span_id:721) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive source-conflict &&\n' span_id: 722 ) (Token id:Id.Lit_Chars val:'\n' span_id:723) (Token id: Id.Lit_Chars val: '\ttest 1 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 724 ) (Token id:Id.Lit_Chars val:'\n' span_id:725) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --quiet &&\n' span_id:726) (Token id:Id.Lit_Chars val:'\n' span_id:727) (Token id:Id.Lit_Chars val:'\ttest -f destdir/foo &&\n' span_id:728) (Token id:Id.Lit_Chars val:'\ttest -f one &&\n' span_id:729) (Token id:Id.Lit_Chars val:'\ttest -f destdir~HEAD &&\n' span_id:730) (Token id:Id.Lit_Chars val:'\ttest "stuff" = "$(cat destdir~HEAD)"\n' span_id:731) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup pair rename to parent of other (D/F conflicts)' span_id: 738 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:742) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:743) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan rename-two &&\n' span_id:744) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:745) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:746) (Token id:Id.Lit_Chars val:'\n' span_id:747) (Token id:Id.Lit_Chars val:'\tmkdir one &&\n' span_id:748) (Token id:Id.Lit_Chars val:'\tmkdir two &&\n' span_id:749) (Token id:Id.Lit_Chars val:'\techo stuff >one/file &&\n' span_id:750) (Token id:Id.Lit_Chars val:'\techo other >two/file &&\n' span_id:751) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:752) (Token id:Id.Lit_Chars val:'\tgit commit -m "Common commit" &&\n' span_id:753) (Token id:Id.Lit_Chars val:'\n' span_id:754) (Token id:Id.Lit_Chars val:'\tgit rm -rf one &&\n' span_id:755) (Token id:Id.Lit_Chars val:'\tgit mv two/file one &&\n' span_id:756) (Token id: Id.Lit_Chars val: '\tgit commit -m "Rename two/file -> one" &&\n' span_id: 757 ) (Token id:Id.Lit_Chars val:'\n' span_id:758) (Token id: Id.Lit_Chars val: '\tgit checkout -b rename-one HEAD~1 &&\n' span_id: 759 ) (Token id:Id.Lit_Chars val:'\tgit rm -rf two &&\n' span_id:760) (Token id:Id.Lit_Chars val:'\tgit mv one/file two &&\n' span_id:761) (Token id:Id.Lit_Chars val:'\trm -r one &&\n' span_id:762) (Token id: Id.Lit_Chars val: '\tgit commit -m "Rename one/file -> two"\n' span_id: 763 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'pair rename to parent of other (D/F conflicts) w/ untracked dir' span_id: 770 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:774) (Token id:Id.Lit_Chars val:'\tgit checkout -q rename-one^0 &&\n' span_id:775) (Token id:Id.Lit_Chars val:'\tmkdir one &&\n' span_id:776) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive rename-two &&\n' span_id: 777 ) (Token id:Id.Lit_Chars val:'\n' span_id:778) (Token id: Id.Lit_Chars val: '\ttest 2 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 779 ) (Token id:Id.Lit_Chars val:'\ttest 1 -eq "$(git ls-files -u one | wc -l)" &&\n' span_id:780) (Token id: Id.Lit_Chars val: '\ttest 1 -eq "$(git ls-files -u two | wc -l)" &&\n' span_id: 781 ) (Token id:Id.Lit_Chars val:'\n' span_id:782) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --quiet &&\n' span_id:783) (Token id:Id.Lit_Chars val:'\n' span_id:784) (Token id: Id.Lit_Chars val: '\ttest 4 -eq $(find . | grep -v .git | wc -l) &&\n' span_id: 785 ) (Token id:Id.Lit_Chars val:'\n' span_id:786) (Token id:Id.Lit_Chars val:'\ttest -d one &&\n' span_id:787) (Token id:Id.Lit_Chars val:'\ttest -f one~rename-two &&\n' span_id:788) (Token id:Id.Lit_Chars val:'\ttest -f two &&\n' span_id:789) (Token id:Id.Lit_Chars val:'\ttest "other" = $(cat one~rename-two) &&\n' span_id:790) (Token id:Id.Lit_Chars val:'\ttest "stuff" = $(cat two)\n' span_id:791) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'pair rename to parent of other (D/F conflicts) w/ clean start' span_id: 798 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:802) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:803) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:804) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive rename-two &&\n' span_id: 805 ) (Token id:Id.Lit_Chars val:'\n' span_id:806) (Token id: Id.Lit_Chars val: '\ttest 2 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 807 ) (Token id:Id.Lit_Chars val:'\ttest 1 -eq "$(git ls-files -u one | wc -l)" &&\n' span_id:808) (Token id: Id.Lit_Chars val: '\ttest 1 -eq "$(git ls-files -u two | wc -l)" &&\n' span_id: 809 ) (Token id:Id.Lit_Chars val:'\n' span_id:810) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --quiet &&\n' span_id:811) (Token id:Id.Lit_Chars val:'\n' span_id:812) (Token id: Id.Lit_Chars val: '\ttest 3 -eq $(find . | grep -v .git | wc -l) &&\n' span_id: 813 ) (Token id:Id.Lit_Chars val:'\n' span_id:814) (Token id:Id.Lit_Chars val:'\ttest -f one &&\n' span_id:815) (Token id:Id.Lit_Chars val:'\ttest -f two &&\n' span_id:816) (Token id:Id.Lit_Chars val:'\ttest "other" = $(cat one) &&\n' span_id:817) (Token id:Id.Lit_Chars val:'\ttest "stuff" = $(cat two)\n' span_id:818) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup rename of one file to two, with directories in the way' span_id: 825 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:829) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:830) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan first-rename &&\n' span_id:831) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:832) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:833) (Token id:Id.Lit_Chars val:'\n' span_id:834) (Token id:Id.Lit_Chars val:'\techo stuff >original &&\n' span_id:835) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:836) (Token id:Id.Lit_Chars val:'\tgit commit -m "Common commit" &&\n' span_id:837) (Token id:Id.Lit_Chars val:'\n' span_id:838) (Token id:Id.Lit_Chars val:'\tmkdir two &&\n' span_id:839) (Token id:Id.Lit_Chars val:'\t>two/file &&\n' span_id:840) (Token id:Id.Lit_Chars val:'\tgit add two/file &&\n' span_id:841) (Token id:Id.Lit_Chars val:'\tgit mv original one &&\n' span_id:842) (Token id: Id.Lit_Chars val: '\tgit commit -m "Put two/file in the way, rename to one" &&\n' span_id: 843 ) (Token id:Id.Lit_Chars val:'\n' span_id:844) (Token id: Id.Lit_Chars val: '\tgit checkout -b second-rename HEAD~1 &&\n' span_id: 845 ) (Token id:Id.Lit_Chars val:'\tmkdir one &&\n' span_id:846) (Token id:Id.Lit_Chars val:'\t>one/file &&\n' span_id:847) (Token id:Id.Lit_Chars val:'\tgit add one/file &&\n' span_id:848) (Token id:Id.Lit_Chars val:'\tgit mv original two &&\n' span_id:849) (Token id:Id.Lit_Chars val:'\tgit commit -m "Put one/file in the way, rename to two"\n' span_id:850) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'check handling of differently renamed file with D/F conflicts' span_id: 857 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:861) (Token id:Id.Lit_Chars val:'\tgit checkout -q first-rename^0 &&\n' span_id:862) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive second-rename &&\n' span_id: 863 ) (Token id:Id.Lit_Chars val:'\n' span_id:864) (Token id: Id.Lit_Chars val: '\ttest 5 -eq "$(git ls-files -s | wc -l)" &&\n' span_id: 865 ) (Token id:Id.Lit_Chars val:'\ttest 3 -eq "$(git ls-files -u | wc -l)" &&\n' span_id:866) (Token id: Id.Lit_Chars val: '\ttest 1 -eq "$(git ls-files -u one | wc -l)" &&\n' span_id: 867 ) (Token id:Id.Lit_Chars val:'\ttest 1 -eq "$(git ls-files -u two | wc -l)" &&\n' span_id:868) (Token id: Id.Lit_Chars val: '\ttest 1 -eq "$(git ls-files -u original | wc -l)" &&\n' span_id: 869 ) (Token id:Id.Lit_Chars val:'\ttest 2 -eq "$(git ls-files -o | wc -l)" &&\n' span_id:870) (Token id:Id.Lit_Chars val:'\n' span_id:871) (Token id:Id.Lit_Chars val:'\ttest -f one/file &&\n' span_id:872) (Token id:Id.Lit_Chars val:'\ttest -f two/file &&\n' span_id:873) (Token id:Id.Lit_Chars val:'\ttest -f one~HEAD &&\n' span_id:874) (Token id:Id.Lit_Chars val:'\ttest -f two~second-rename &&\n' span_id:875) (Token id:Id.Lit_Chars val:'\t! test -f original\n' span_id:876) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup rename one file to two; directories moving out of the way' span_id: 883 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:887) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:888) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan first-rename-redo &&\n' span_id:889) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:890) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:891) (Token id:Id.Lit_Chars val:'\n' span_id:892) (Token id:Id.Lit_Chars val:'\techo stuff >original &&\n' span_id:893) (Token id:Id.Lit_Chars val:'\tmkdir one two &&\n' span_id:894) (Token id:Id.Lit_Chars val:'\ttouch one/file two/file &&\n' span_id:895) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:896) (Token id:Id.Lit_Chars val:'\tgit commit -m "Common commit" &&\n' span_id:897) (Token id:Id.Lit_Chars val:'\n' span_id:898) (Token id:Id.Lit_Chars val:'\tgit rm -rf one &&\n' span_id:899) (Token id:Id.Lit_Chars val:'\tgit mv original one &&\n' span_id:900) (Token id:Id.Lit_Chars val:'\tgit commit -m "Rename to one" &&\n' span_id:901) (Token id:Id.Lit_Chars val:'\n' span_id:902) (Token id:Id.Lit_Chars val:'\tgit checkout -b second-rename-redo HEAD~1 &&\n' span_id:903) (Token id:Id.Lit_Chars val:'\tgit rm -rf two &&\n' span_id:904) (Token id:Id.Lit_Chars val:'\tgit mv original two &&\n' span_id:905) (Token id:Id.Lit_Chars val:'\tgit commit -m "Rename to two"\n' span_id:906) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'check handling of differently renamed file with D/F conflicts' span_id: 913 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:917) (Token id: Id.Lit_Chars val: '\tgit checkout -q first-rename-redo^0 &&\n' span_id: 918 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge --strategy=recursive second-rename-redo &&\n' span_id: 919 ) (Token id:Id.Lit_Chars val:'\n' span_id:920) (Token id: Id.Lit_Chars val: '\ttest 3 -eq "$(git ls-files -u | wc -l)" &&\n' span_id: 921 ) (Token id:Id.Lit_Chars val:'\ttest 1 -eq "$(git ls-files -u one | wc -l)" &&\n' span_id:922) (Token id: Id.Lit_Chars val: '\ttest 1 -eq "$(git ls-files -u two | wc -l)" &&\n' span_id: 923 ) (Token id:Id.Lit_Chars val:'\ttest 1 -eq "$(git ls-files -u original | wc -l)" &&\n' span_id:924) (Token id: Id.Lit_Chars val: '\ttest 0 -eq "$(git ls-files -o | wc -l)" &&\n' span_id: 925 ) (Token id:Id.Lit_Chars val:'\n' span_id:926) (Token id:Id.Lit_Chars val:'\ttest -f one &&\n' span_id:927) (Token id:Id.Lit_Chars val:'\ttest -f two &&\n' span_id:928) (Token id:Id.Lit_Chars val:'\t! test -f original\n' span_id:929) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup avoid unnecessary update, normal rename' span_id:936))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:940) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:941) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan avoid-unnecessary-update-1 &&\n' span_id:942) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:943) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:944) (Token id:Id.Lit_Chars val:'\n' span_id:945) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n" >original &&\n' span_id: 946 ) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:947) (Token id:Id.Lit_Chars val:'\tgit commit -m "Common commit" &&\n' span_id:948) (Token id:Id.Lit_Chars val:'\n' span_id:949) (Token id:Id.Lit_Chars val:'\tgit mv original rename &&\n' span_id:950) (Token id:Id.Lit_Chars val:'\techo 11 >>rename &&\n' span_id:951) (Token id:Id.Lit_Chars val:'\tgit add -u &&\n' span_id:952) (Token id:Id.Lit_Chars val:'\tgit commit -m "Renamed and modified" &&\n' span_id:953) (Token id:Id.Lit_Chars val:'\n' span_id:954) (Token id:Id.Lit_Chars val:'\tgit checkout -b merge-branch-1 HEAD~1 &&\n' span_id:955) (Token id: Id.Lit_Chars val: '\techo "random content" >random-file &&\n' span_id: 956 ) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:957) (Token id: Id.Lit_Chars val: '\tgit commit -m "Random, unrelated changes"\n' span_id: 958 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'avoid unnecessary update, normal rename' span_id:965))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:969) (Token id: Id.Lit_Chars val: '\tgit checkout -q avoid-unnecessary-update-1^0 &&\n' span_id: 970 ) (Token id:Id.Lit_Chars val:'\ttest-chmtime =1000000000 rename &&\n' span_id:971) (Token id: Id.Lit_Chars val: '\ttest-chmtime -v +0 rename >expect &&\n' span_id: 972 ) (Token id:Id.Lit_Chars val:'\tgit merge merge-branch-1 &&\n' span_id:973) (Token id: Id.Lit_Chars val: '\ttest-chmtime -v +0 rename >actual &&\n' span_id: 974 ) (Token id: Id.Lit_Chars val: '\ttest_cmp expect actual # "rename" should have stayed intact\n' span_id: 975 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup to test avoiding unnecessary update, with D/F conflict' span_id: 982 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:986) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:987) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan avoid-unnecessary-update-2 &&\n' span_id:988) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:989) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:990) (Token id:Id.Lit_Chars val:'\n' span_id:991) (Token id:Id.Lit_Chars val:'\tmkdir df &&\n' span_id:992) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n" >df/file &&\n' span_id: 993 ) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:994) (Token id:Id.Lit_Chars val:'\tgit commit -m "Common commit" &&\n' span_id:995) (Token id:Id.Lit_Chars val:'\n' span_id:996) (Token id:Id.Lit_Chars val:'\tgit mv df/file temp &&\n' span_id:997) (Token id:Id.Lit_Chars val:'\trm -rf df &&\n' span_id:998) (Token id:Id.Lit_Chars val:'\tgit mv temp df &&\n' span_id:999) (Token id:Id.Lit_Chars val:'\techo 11 >>df &&\n' span_id:1000) (Token id:Id.Lit_Chars val:'\tgit add -u &&\n' span_id:1001) (Token id:Id.Lit_Chars val:'\tgit commit -m "Renamed and modified" &&\n' span_id:1002) (Token id:Id.Lit_Chars val:'\n' span_id:1003) (Token id:Id.Lit_Chars val:'\tgit checkout -b merge-branch-2 HEAD~1 &&\n' span_id:1004) (Token id:Id.Lit_Chars val:'\t>unrelated-change &&\n' span_id:1005) (Token id:Id.Lit_Chars val:'\tgit add unrelated-change &&\n' span_id:1006) (Token id: Id.Lit_Chars val: '\tgit commit -m "Only unrelated changes"\n' span_id: 1007 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'avoid unnecessary update, with D/F conflict' span_id:1014))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1018) (Token id: Id.Lit_Chars val: '\tgit checkout -q avoid-unnecessary-update-2^0 &&\n' span_id: 1019 ) (Token id:Id.Lit_Chars val:'\ttest-chmtime =1000000000 df &&\n' span_id:1020) (Token id:Id.Lit_Chars val:'\ttest-chmtime -v +0 df >expect &&\n' span_id:1021) (Token id:Id.Lit_Chars val:'\tgit merge merge-branch-2 &&\n' span_id:1022) (Token id:Id.Lit_Chars val:'\ttest-chmtime -v +0 df >actual &&\n' span_id:1023) (Token id: Id.Lit_Chars val: '\ttest_cmp expect actual # "df" should have stayed intact\n' span_id: 1024 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup avoid unnecessary update, dir->(file,nothing)' span_id: 1031 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1035) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:1036) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:1037) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:1038) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:1039) (Token id:Id.Lit_Chars val:'\n' span_id:1040) (Token id:Id.Lit_Chars val:'\t>irrelevant &&\n' span_id:1041) (Token id:Id.Lit_Chars val:'\tmkdir df &&\n' span_id:1042) (Token id:Id.Lit_Chars val:'\t>df/file &&\n' span_id:1043) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:1044) (Token id:Id.Lit_Chars val:'\tgit commit -mA &&\n' span_id:1045) (Token id:Id.Lit_Chars val:'\n' span_id:1046) (Token id:Id.Lit_Chars val:'\tgit checkout -b side &&\n' span_id:1047) (Token id:Id.Lit_Chars val:'\tgit rm -rf df &&\n' span_id:1048) (Token id:Id.Lit_Chars val:'\tgit commit -mB &&\n' span_id:1049) (Token id:Id.Lit_Chars val:'\n' span_id:1050) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:1051) (Token id:Id.Lit_Chars val:'\tgit rm -rf df &&\n' span_id:1052) (Token id:Id.Lit_Chars val:'\techo bla >df &&\n' span_id:1053) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:1054) (Token id:Id.Lit_Chars val:'\tgit commit -m "Add a newfile"\n' span_id:1055) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'avoid unnecessary update, dir->(file,nothing)' span_id:1062))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1066) (Token id:Id.Lit_Chars val:'\tgit checkout -q master^0 &&\n' span_id:1067) (Token id:Id.Lit_Chars val:'\ttest-chmtime =1000000000 df &&\n' span_id:1068) (Token id:Id.Lit_Chars val:'\ttest-chmtime -v +0 df >expect &&\n' span_id:1069) (Token id:Id.Lit_Chars val:'\tgit merge side &&\n' span_id:1070) (Token id:Id.Lit_Chars val:'\ttest-chmtime -v +0 df >actual &&\n' span_id:1071) (Token id: Id.Lit_Chars val: '\ttest_cmp expect actual # "df" should have stayed intact\n' span_id: 1072 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup avoid unnecessary update, modify/delete' span_id:1079))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1083) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:1084) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:1085) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:1086) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:1087) (Token id:Id.Lit_Chars val:'\n' span_id:1088) (Token id:Id.Lit_Chars val:'\t>irrelevant &&\n' span_id:1089) (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:1090) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:1091) (Token id:Id.Lit_Chars val:'\tgit commit -mA &&\n' span_id:1092) (Token id:Id.Lit_Chars val:'\n' span_id:1093) (Token id:Id.Lit_Chars val:'\tgit checkout -b side &&\n' span_id:1094) (Token id:Id.Lit_Chars val:'\tgit rm -f file &&\n' span_id:1095) (Token id:Id.Lit_Chars val:'\tgit commit -m "Delete file" &&\n' span_id:1096) (Token id:Id.Lit_Chars val:'\n' span_id:1097) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:1098) (Token id:Id.Lit_Chars val:'\techo bla >file &&\n' span_id:1099) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:1100) (Token id:Id.Lit_Chars val:'\tgit commit -m "Modify file"\n' span_id:1101) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'avoid unnecessary update, modify/delete' span_id:1108))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1112) (Token id:Id.Lit_Chars val:'\tgit checkout -q master^0 &&\n' span_id:1113) (Token id:Id.Lit_Chars val:'\ttest-chmtime =1000000000 file &&\n' span_id:1114) (Token id:Id.Lit_Chars val:'\ttest-chmtime -v +0 file >expect &&\n' span_id:1115) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge side &&\n' span_id:1116) (Token id:Id.Lit_Chars val:'\ttest-chmtime -v +0 file >actual &&\n' span_id:1117) (Token id: Id.Lit_Chars val: '\ttest_cmp expect actual # "file" should have stayed intact\n' span_id: 1118 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup avoid unnecessary update, rename/add-dest' span_id: 1125 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1129) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:1130) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:1131) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:1132) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:1133) (Token id:Id.Lit_Chars val:'\n' span_id:1134) (Token id:Id.Lit_Chars val:'\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n" >file &&\n' span_id:1135) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:1136) (Token id:Id.Lit_Chars val:'\tgit commit -mA &&\n' span_id:1137) (Token id:Id.Lit_Chars val:'\n' span_id:1138) (Token id:Id.Lit_Chars val:'\tgit checkout -b side &&\n' span_id:1139) (Token id:Id.Lit_Chars val:'\tcp file newfile &&\n' span_id:1140) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:1141) (Token id:Id.Lit_Chars val:'\tgit commit -m "Add file copy" &&\n' span_id:1142) (Token id:Id.Lit_Chars val:'\n' span_id:1143) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:1144) (Token id:Id.Lit_Chars val:'\tgit mv file newfile &&\n' span_id:1145) (Token id:Id.Lit_Chars val:'\tgit commit -m "Rename file"\n' span_id:1146) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'avoid unnecessary update, rename/add-dest' span_id:1153))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1157) (Token id:Id.Lit_Chars val:'\tgit checkout -q master^0 &&\n' span_id:1158) (Token id:Id.Lit_Chars val:'\ttest-chmtime =1000000000 newfile &&\n' span_id:1159) (Token id: Id.Lit_Chars val: '\ttest-chmtime -v +0 newfile >expect &&\n' span_id: 1160 ) (Token id:Id.Lit_Chars val:'\tgit merge side &&\n' span_id:1161) (Token id: Id.Lit_Chars val: '\ttest-chmtime -v +0 newfile >actual &&\n' span_id: 1162 ) (Token id: Id.Lit_Chars val: '\ttest_cmp expect actual # "file" should have stayed intact\n' span_id: 1163 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup merge of rename + small change' span_id:1170))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1174) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1175) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan rename-plus-small-change &&\n' span_id:1176) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:1177) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:1178) (Token id:Id.Lit_Chars val:'\n' span_id:1179) (Token id:Id.Lit_Chars val:'\techo ORIGINAL >file &&\n' span_id:1180) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:1181) (Token id:Id.Lit_Chars val:'\n' span_id:1182) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1183) (Token id:Id.Lit_Chars val:'\tgit commit -m Initial &&\n' span_id:1184) (Token id:Id.Lit_Chars val:'\tgit checkout -b rename_branch &&\n' span_id:1185) (Token id:Id.Lit_Chars val:'\tgit mv file renamed_file &&\n' span_id:1186) (Token id:Id.Lit_Chars val:'\tgit commit -m Rename &&\n' span_id:1187) (Token id:Id.Lit_Chars val:'\tgit checkout rename-plus-small-change &&\n' span_id:1188) (Token id:Id.Lit_Chars val:'\techo NEW-VERSION >file &&\n' span_id:1189) (Token id:Id.Lit_Chars val:'\tgit commit -a -m Reformat\n' span_id:1190) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge rename + small change' span_id:1197))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1201) (Token id:Id.Lit_Chars val:'\tgit merge rename_branch &&\n' span_id:1202) (Token id:Id.Lit_Chars val:'\n' span_id:1203) (Token id: Id.Lit_Chars val: '\ttest 1 -eq $(git ls-files -s | wc -l) &&\n' span_id: 1204 ) (Token id:Id.Lit_Chars val:'\ttest 0 -eq $(git ls-files -o | wc -l) &&\n' span_id:1205) (Token id: Id.Lit_Chars val: '\ttest $(git rev-parse HEAD:renamed_file) = $(git rev-parse HEAD~1:file)\n' span_id: 1206 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for use of extended merge markers' span_id:1213))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1217) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:1218) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:1219) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:1220) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:1221) (Token id:Id.Lit_Chars val:'\n' span_id:1222) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n" >original_file &&\n' span_id: 1223 ) (Token id:Id.Lit_Chars val:'\tgit add original_file &&\n' span_id:1224) (Token id:Id.Lit_Chars val:'\tgit commit -mA &&\n' span_id:1225) (Token id:Id.Lit_Chars val:'\n' span_id:1226) (Token id:Id.Lit_Chars val:'\tgit checkout -b rename &&\n' span_id:1227) (Token id:Id.Lit_Chars val:'\techo 9 >>original_file &&\n' span_id:1228) (Token id:Id.Lit_Chars val:'\tgit add original_file &&\n' span_id:1229) (Token id:Id.Lit_Chars val:'\tgit mv original_file renamed_file &&\n' span_id:1230) (Token id:Id.Lit_Chars val:'\tgit commit -mB &&\n' span_id:1231) (Token id:Id.Lit_Chars val:'\n' span_id:1232) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:1233) (Token id:Id.Lit_Chars val:'\techo 8.5 >>original_file &&\n' span_id:1234) (Token id:Id.Lit_Chars val:'\tgit add original_file &&\n' span_id:1235) (Token id:Id.Lit_Chars val:'\tgit commit -mC\n' span_id:1236) ) } ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1242) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1245) fd: -1 here_begin: { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\E' span_id:1246) ) (OF) } here_end_span_id: 1264 stdin_parts: [ ('1\n') ('2\n') ('3\n') ('4\n') ('5\n') ('6\n') ('7\n') ('8\n') ('<<<<<<< HEAD:renamed_file\n') ('9\n') ('=======\n') ('8.5\n') ('>>>>>>> master^0:original_file\n') ] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'merge master into rename has correct extended markers' span_id: 1269 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1273) (Token id:Id.Lit_Chars val:'\tgit checkout rename^0 &&\n' span_id:1274) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive master^0 &&\n' span_id:1275) (Token id: Id.Lit_Chars val: '\ttest_cmp expected renamed_file\n' span_id: 1276 ) ) } ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1282) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1285) fd: -1 here_begin: { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\E' span_id:1286) ) (OF) } here_end_span_id: 1304 stdin_parts: [ ('1\n') ('2\n') ('3\n') ('4\n') ('5\n') ('6\n') ('7\n') ('8\n') ('<<<<<<< HEAD:original_file\n') ('8.5\n') ('=======\n') ('9\n') ('>>>>>>> rename^0:renamed_file\n') ] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'merge rename into master has correct extended markers' span_id: 1309 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1313) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1314) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:1315) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge -s recursive rename^0 &&\n' span_id: 1316 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected renamed_file\n' span_id:1317) ) } ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup spurious "refusing to lose untracked" message' span_id: 1324 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1328) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:1329) (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:1330) (Token id:Id.Lit_Chars val:'\trm -rf .git &&\n' span_id:1331) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:1332) (Token id:Id.Lit_Chars val:'\n' span_id:1333) (Token id:Id.Lit_Chars val:'\t> irrelevant_file &&\n' span_id:1334) (Token id: Id.Lit_Chars val: '\tprintf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n" >original_file &&\n' span_id: 1335 ) (Token id:Id.Lit_Chars val:'\tgit add irrelevant_file original_file &&\n' span_id:1336) (Token id:Id.Lit_Chars val:'\tgit commit -mA &&\n' span_id:1337) (Token id:Id.Lit_Chars val:'\n' span_id:1338) (Token id:Id.Lit_Chars val:'\tgit checkout -b rename &&\n' span_id:1339) (Token id:Id.Lit_Chars val:'\tgit mv original_file renamed_file &&\n' span_id:1340) (Token id:Id.Lit_Chars val:'\tgit commit -mB &&\n' span_id:1341) (Token id:Id.Lit_Chars val:'\n' span_id:1342) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:1343) (Token id:Id.Lit_Chars val:'\tgit rm original_file &&\n' span_id:1344) (Token id:Id.Lit_Chars val:'\tgit commit -mC\n' span_id:1345) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'no spurious "refusing to lose untracked" message' span_id: 1352 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1356) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:1357) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge rename^0 2>errors.txt &&\n' span_id:1358) (Token id: Id.Lit_Chars val: '\t! grep "refusing to lose untracked file" errors.txt\n' span_id: 1359 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not follow renames for empty files' span_id:1366))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1370) (Token id:Id.Lit_Chars val:'\tgit checkout -f -b empty-base &&\n' span_id:1371) (Token id:Id.Lit_Chars val:'\t>empty1 &&\n' span_id:1372) (Token id:Id.Lit_Chars val:'\tgit add empty1 &&\n' span_id:1373) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:1374) (Token id:Id.Lit_Chars val:'\techo content >empty1 &&\n' span_id:1375) (Token id:Id.Lit_Chars val:'\tgit add empty1 &&\n' span_id:1376) (Token id:Id.Lit_Chars val:'\tgit commit -m fill &&\n' span_id:1377) (Token id:Id.Lit_Chars val:'\tgit checkout -b empty-topic HEAD^ &&\n' span_id:1378) (Token id:Id.Lit_Chars val:'\tgit mv empty1 empty2 &&\n' span_id:1379) (Token id:Id.Lit_Chars val:'\tgit commit -m rename &&\n' span_id:1380) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge empty-base &&\n' span_id: 1381 ) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:1382) (Token id:Id.Lit_Chars val:'\ttest_cmp expect empty2\n' span_id:1383) ) } ) (C {(test_done)}) ] )