(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)})
  ]
)