(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:'git checkout tests.\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'Creates master, forks renamer and side branches from it.\n' span_id:17) 
                (Token
                  id: Id.Lit_Chars
                  val: 'Test switching across them.\n'
                  span_id: 18
                ) (Token id:Id.Lit_Chars val:'\n' span_id:19) 
                (Token
                  id: Id.Lit_Chars
                  val: '  ! [master] Initial A one, A two\n'
                  span_id: 20
                ) (Token id:Id.Lit_Chars val:'   * [renamer] Renamer R one->uno, M two\n' span_id:21) 
                (Token
                  id: Id.Lit_Chars
                  val: '    ! [side] Side M one, D two, A three\n'
                  span_id: 22
                ) (Token id:Id.Lit_Chars val:'     ! [simple] Simple D one, M two\n' span_id:23) 
                (Token id:Id.Lit_Chars val:'  ----\n' span_id:24) (Token id:Id.Lit_Chars val:'     + [simple] Simple D one, M two\n' span_id:25) 
                (Token
                  id: Id.Lit_Chars
                  val: '    +  [side] Side M one, D two, A three\n'
                  span_id: 26
                ) (Token id:Id.Lit_Chars val:'   *   [renamer] Renamer R one->uno, M two\n' span_id:27) 
                (Token
                  id: Id.Lit_Chars
                  val: '  +*++ [master] Initial A one, A two\n'
                  span_id: 28
                ) (Token id:Id.Lit_Chars val:'\n' span_id:29)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_tick)})
    (command.ShFunction
      name: fill
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: i
              do_arg_iter: T
              body: (command.DoGroup children:[(C {(echo)} {(DQ ($ Id.VSub_DollarName '$i'))})])
            )
          ]
        )
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:75) (Token id:Id.Lit_Chars val:'\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\tfill x y z > same &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tfill 1 2 3 4 5 6 7 8 >one &&\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\tfill a b c d e >two &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\tgit add same one two &&\n' span_id:80) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Initial A one, A two" &&\n'
            span_id: 81
          ) (Token id:Id.Lit_Chars val:'\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b renamer &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\trm -f one &&\n' span_id:84) 
          (Token id:Id.Lit_Chars val:'\tfill 1 3 4 5 6 7 8 >uno &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\tgit add uno &&\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\tfill a b c d e f >two &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "Renamer R one->uno, M two" &&\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\n' span_id:89) (Token id:Id.Lit_Chars val:'\tgit checkout -b side master &&\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tfill 1 2 3 4 5 6 7 >one &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tfill A B C D E >three &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\trm -f two &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\tgit update-index --add --remove one two three &&\n' span_id:94) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Side M one, D two, A three" &&\n'
            span_id: 95
          ) (Token id:Id.Lit_Chars val:'\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b simple master &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\trm -f one &&\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\tfill a c e > two &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "Simple D one, M two" &&\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\n' span_id:101) (Token id:Id.Lit_Chars val:'\tgit checkout master\n' span_id:102)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('checkout from non-existing branch'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:113) (Token id:Id.Lit_Chars val:'\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b delete-me master &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\trm .git/refs/heads/delete-me &&\n' span_id:116) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest refs/heads/delete-me = "$(git symbolic-ref HEAD)" &&\n'
            span_id: 117
          ) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:118) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest refs/heads/master = "$(git symbolic-ref HEAD)"\n'
            span_id: 119
          )
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('checkout with dirty tree without -m'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:130) (Token id:Id.Lit_Chars val:'\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\tfill 0 1 2 3 4 5 6 7 8 >one &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\tif git checkout side\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:134) (Token id:Id.Lit_Chars val:'\t\techo Not happy\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:136) (Token id:Id.Lit_Chars val:'\telse\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\t\techo "happy - failed correctly"\n' span_id:138) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:139) (Token id:Id.Lit_Chars val:'\n' span_id:140)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('checkout with unrelated dirty tree without -m'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id:Id.Lit_Chars val:'\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -f master &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\tfill 0 1 2 3 4 5 6 7 8 >same &&\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\tcp same kept &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\tgit checkout side >messages &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp same kept &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tprintf "M\\t%s\\n" same >messages.expect &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp messages.expect messages\n' span_id:159)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('checkout -m with dirty tree'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:170) (Token id:Id.Lit_Chars val:'\n' span_id:171) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -f master &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\tgit clean -f &&\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\n' span_id:174) (Token id:Id.Lit_Chars val:'\tfill 0 1 2 3 4 5 6 7 8 >one &&\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -m side > messages &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\n' span_id:177) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git symbolic-ref HEAD)" = "refs/heads/side" &&\n'
            span_id: 178
          ) (Token id:Id.Lit_Chars val:'\n' span_id:179) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "M\\t%s\\n" one >expect.messages &&\n'
            span_id: 180
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.messages messages &&\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\n' span_id:182) (Token id:Id.Lit_Chars val:'\tfill "M\tone" "A\tthree" "D\ttwo" >expect.master &&\n' span_id:183) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-status master >current.master &&\n'
            span_id: 184
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.master current.master &&\n' span_id:185) 
          (Token id:Id.Lit_Chars val:'\n' span_id:186) (Token id:Id.Lit_Chars val:'\tfill "M\tone" >expect.side &&\n' span_id:187) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-status side >current.side &&\n'
            span_id: 188
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.side current.side &&\n' span_id:189) 
          (Token id:Id.Lit_Chars val:'\n' span_id:190) (Token id:Id.Lit_Chars val:'\t: >expect.index &&\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\tgit diff --cached >current.index &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.index current.index\n' span_id:193)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('checkout -m with dirty tree, renamed'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:204) (Token id:Id.Lit_Chars val:'\n' span_id:205) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -f master && git clean -f &&\n'
            span_id: 206
          ) (Token id:Id.Lit_Chars val:'\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\tfill 1 2 3 4 5 7 8 >one &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tif git checkout renamer\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:210) (Token id:Id.Lit_Chars val:'\t\techo Not happy\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:212) (Token id:Id.Lit_Chars val:'\telse\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\t\techo "happy - failed correctly"\n' span_id:214) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\n' span_id:216) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -m renamer &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\tfill 1 3 4 5 7 8 >expect &&\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect uno &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\t! test -f one &&\n' span_id:220) 
          (Token id:Id.Lit_Chars val:'\tgit diff --cached >current &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\t! test -s current\n' span_id:222) 
          (Token id:Id.Lit_Chars val:'\n' span_id:223)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout -m with merge conflict' span_id:230))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:234) (Token id:Id.Lit_Chars val:'\n' span_id:235) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -f master && git clean -f &&\n'
            span_id: 236
          ) (Token id:Id.Lit_Chars val:'\n' span_id:237) 
          (Token id:Id.Lit_Chars val:'\tfill 1 T 3 4 5 6 S 8 >one &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\tif git checkout renamer\n' span_id:239) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:240) (Token id:Id.Lit_Chars val:'\t\techo Not happy\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:242) (Token id:Id.Lit_Chars val:'\telse\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\t\techo "happy - failed correctly"\n' span_id:244) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\n' span_id:246) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -m renamer &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\tgit diff master:one :3:uno |\n' span_id:249) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "1,/^@@/d" -e "/^ /d" -e "s/^-/d/" -e "s/^+/a/" >current &&\n'
            span_id: 250
          ) (Token id:Id.Lit_Chars val:'\tfill d2 aT d7 aS >expect &&\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp current expect &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\tgit diff --cached two >current &&\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\t! test -s current\n' span_id:254)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'format of merge conflict from checkout -m' span_id:261))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) (Token id:Id.Lit_Chars val:'\n' span_id:266) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -f master && git clean -f &&\n'
            span_id: 267
          ) (Token id:Id.Lit_Chars val:'\n' span_id:268) 
          (Token id:Id.Lit_Chars val:'\tfill b d > two &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\tgit checkout -m simple &&\n' span_id:270) 
          (Token id:Id.Lit_Chars val:'\n' span_id:271) (Token id:Id.Lit_Chars val:'\tgit ls-files >current &&\n' span_id:272) 
          (Token id:Id.Lit_Chars val:'\tfill same two two two >expect &&\n' span_id:273) (Token id:Id.Lit_Chars val:'\ttest_cmp current expect &&\n' span_id:274) 
          (Token id:Id.Lit_Chars val:'\n' span_id:275) (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expect &&\n' span_id:276) 
          (Token id:Id.Lit_Chars val:'\t<<<<<<< simple\n' span_id:277) (Token id:Id.Lit_Chars val:'\ta\n' span_id:278) (Token id:Id.Lit_Chars val:'\tc\n' span_id:279) 
          (Token id:Id.Lit_Chars val:'\te\n' span_id:280) (Token id:Id.Lit_Chars val:'\t=======\n' span_id:281) (Token id:Id.Lit_Chars val:'\tb\n' span_id:282) 
          (Token id:Id.Lit_Chars val:'\td\n' span_id:283) (Token id:Id.Lit_Chars val:'\t>>>>>>> local\n' span_id:284) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:285) (Token id:Id.Lit_Chars val:'\ttest_cmp two expect\n' span_id:286)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout --merge --conflict=diff3 <branch>' span_id:293))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:297) (Token id:Id.Lit_Chars val:'\n' span_id:298) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -f master && git reset --hard && git clean -f &&\n'
            span_id: 299
          ) (Token id:Id.Lit_Chars val:'\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\tfill b d > two &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\tgit checkout --merge --conflict=diff3 simple &&\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\n' span_id:303) (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expect &&\n' span_id:304) 
          (Token id:Id.Lit_Chars val:'\t<<<<<<< simple\n' span_id:305) (Token id:Id.Lit_Chars val:'\ta\n' span_id:306) (Token id:Id.Lit_Chars val:'\tc\n' span_id:307) 
          (Token id:Id.Lit_Chars val:'\te\n' span_id:308) (Token id:Id.Lit_Chars val:'\t||||||| master\n' span_id:309) 
          (Token id:Id.Lit_Chars val:'\ta\n' span_id:310) (Token id:Id.Lit_Chars val:'\tb\n' span_id:311) (Token id:Id.Lit_Chars val:'\tc\n' span_id:312) 
          (Token id:Id.Lit_Chars val:'\td\n' span_id:313) (Token id:Id.Lit_Chars val:'\te\n' span_id:314) (Token id:Id.Lit_Chars val:'\t=======\n' span_id:315) 
          (Token id:Id.Lit_Chars val:'\tb\n' span_id:316) (Token id:Id.Lit_Chars val:'\td\n' span_id:317) 
          (Token id:Id.Lit_Chars val:'\t>>>>>>> local\n' span_id:318) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:319) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp two expect\n' span_id:320)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'switch to another branch while carrying a deletion'
            span_id: 327
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:331) (Token id:Id.Lit_Chars val:'\n' span_id:332) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -f master && git reset --hard && git clean -f &&\n'
            span_id: 333
          ) (Token id:Id.Lit_Chars val:'\tgit rm two &&\n' span_id:334) 
          (Token id:Id.Lit_Chars val:'\n' span_id:335) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout simple 2>errs &&\n' span_id:336) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ngrep overwritten errs &&\n' span_id:337) (Token id:Id.Lit_Chars val:'\n' span_id:338) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout --merge simple 2>errs &&\n'
            span_id: 339
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep ! overwritten errs &&\n' span_id:340) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files -u &&\n' span_id:341) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cat-file -t :0:two &&\n' span_id:342) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git cat-file -t :1:two)" = blob &&\n'
            span_id: 343
          ) (Token id:Id.Lit_Chars val:'\ttest "$(git cat-file -t :2:two)" = blob &&\n' span_id:344) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git cat-file -t :3:two\n'
            span_id: 345
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout to detach HEAD (with advice declined)' span_id:352))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:356) (Token id:Id.Lit_Chars val:'\n' span_id:357) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config advice.detachedHead false &&\n'
            span_id: 358
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -f renamer && git clean -f &&\n' span_id:359) 
          (Token id:Id.Lit_Chars val:'\tgit checkout renamer^ 2>messages &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "HEAD is now at 7329388" messages &&\n' span_id:361) 
          (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 messages &&\n' span_id:362) (Token id:Id.Lit_Chars val:'\tH=$(git rev-parse --verify HEAD) &&\n' span_id:363) 
          (Token
            id: Id.Lit_Chars
            val: '\tM=$(git show-ref -s --verify refs/heads/master) &&\n'
            span_id: 364
          ) (Token id:Id.Lit_Chars val:'\ttest "z$H" = "z$M" &&\n' span_id:365) 
          (Token
            id: Id.Lit_Chars
            val: '\tif git symbolic-ref HEAD >/dev/null 2>&1\n'
            span_id: 366
          ) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:367) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "OOPS, HEAD is still symbolic???"\n'
            span_id: 368
          ) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:369) 
          (Token id:Id.Lit_Chars val:'\telse\n' span_id:370) (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:371) 
          (Token id:Id.Lit_Chars val:'\tfi\n' span_id:372)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout to detach HEAD' span_id:379))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:383) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config advice.detachedHead true &&\n'
            span_id: 384
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -f renamer && git clean -f &&\n' span_id:385) 
          (Token id:Id.Lit_Chars val:'\tgit checkout renamer^ 2>messages &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "HEAD is now at 7329388" messages &&\n' span_id:387) 
          (Token
            id: Id.Lit_Chars
            val: '\t(test_line_count -gt 1 messages || test -n "$GETTEXT_POISON") &&\n'
            span_id: 388
          ) (Token id:Id.Lit_Chars val:'\tH=$(git rev-parse --verify HEAD) &&\n' span_id:389) 
          (Token
            id: Id.Lit_Chars
            val: '\tM=$(git show-ref -s --verify refs/heads/master) &&\n'
            span_id: 390
          ) (Token id:Id.Lit_Chars val:'\ttest "z$H" = "z$M" &&\n' span_id:391) 
          (Token
            id: Id.Lit_Chars
            val: '\tif git symbolic-ref HEAD >/dev/null 2>&1\n'
            span_id: 392
          ) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:393) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "OOPS, HEAD is still symbolic???"\n'
            span_id: 394
          ) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:395) 
          (Token id:Id.Lit_Chars val:'\telse\n' span_id:396) (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:397) 
          (Token id:Id.Lit_Chars val:'\tfi\n' span_id:398)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout to detach HEAD with branchname^' span_id:405))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:409) (Token id:Id.Lit_Chars val:'\n' span_id:410) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -f master && git clean -f &&\n'
            span_id: 411
          ) (Token id:Id.Lit_Chars val:'\tgit checkout renamer^ &&\n' span_id:412) 
          (Token id:Id.Lit_Chars val:'\tH=$(git rev-parse --verify HEAD) &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\tM=$(git show-ref -s --verify refs/heads/master) &&\n' span_id:414) 
          (Token id:Id.Lit_Chars val:'\ttest "z$H" = "z$M" &&\n' span_id:415) (Token id:Id.Lit_Chars val:'\tif git symbolic-ref HEAD >/dev/null 2>&1\n' span_id:416) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:417) (Token id:Id.Lit_Chars val:'\t\techo "OOPS, HEAD is still symbolic???"\n' span_id:418) 
          (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:419) (Token id:Id.Lit_Chars val:'\telse\n' span_id:420) 
          (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:421) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:422)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout to detach HEAD with :/message' span_id:429))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:433) (Token id:Id.Lit_Chars val:'\n' span_id:434) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -f master && git clean -f &&\n'
            span_id: 435
          ) (Token id:Id.Lit_Chars val:'\tgit checkout ":/Initial" &&\n' span_id:436) 
          (Token id:Id.Lit_Chars val:'\tH=$(git rev-parse --verify HEAD) &&\n' span_id:437) (Token id:Id.Lit_Chars val:'\tM=$(git show-ref -s --verify refs/heads/master) &&\n' span_id:438) 
          (Token id:Id.Lit_Chars val:'\ttest "z$H" = "z$M" &&\n' span_id:439) (Token id:Id.Lit_Chars val:'\tif git symbolic-ref HEAD >/dev/null 2>&1\n' span_id:440) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:441) (Token id:Id.Lit_Chars val:'\t\techo "OOPS, HEAD is still symbolic???"\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:443) (Token id:Id.Lit_Chars val:'\telse\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:445) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:446)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout to detach HEAD with HEAD^0' span_id:453))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:457) (Token id:Id.Lit_Chars val:'\n' span_id:458) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -f master && git clean -f &&\n'
            span_id: 459
          ) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^0 &&\n' span_id:460) 
          (Token id:Id.Lit_Chars val:'\tH=$(git rev-parse --verify HEAD) &&\n' span_id:461) (Token id:Id.Lit_Chars val:'\tM=$(git show-ref -s --verify refs/heads/master) &&\n' span_id:462) 
          (Token id:Id.Lit_Chars val:'\ttest "z$H" = "z$M" &&\n' span_id:463) (Token id:Id.Lit_Chars val:'\tif git symbolic-ref HEAD >/dev/null 2>&1\n' span_id:464) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:465) (Token id:Id.Lit_Chars val:'\t\techo "OOPS, HEAD is still symbolic???"\n' span_id:466) 
          (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:467) (Token id:Id.Lit_Chars val:'\telse\n' span_id:468) 
          (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:469) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:470)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout with ambiguous tag/branch names' span_id:477))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:481) (Token id:Id.Lit_Chars val:'\n' span_id:482) 
          (Token id:Id.Lit_Chars val:'\tgit tag both side &&\n' span_id:483) (Token id:Id.Lit_Chars val:'\tgit branch both master &&\n' span_id:484) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:485) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:486) 
          (Token id:Id.Lit_Chars val:'\n' span_id:487) (Token id:Id.Lit_Chars val:'\tgit checkout both &&\n' span_id:488) 
          (Token id:Id.Lit_Chars val:'\tH=$(git rev-parse --verify HEAD) &&\n' span_id:489) (Token id:Id.Lit_Chars val:'\tM=$(git show-ref -s --verify refs/heads/master) &&\n' span_id:490) 
          (Token id:Id.Lit_Chars val:'\ttest "z$H" = "z$M" &&\n' span_id:491) (Token id:Id.Lit_Chars val:'\tname=$(git symbolic-ref HEAD 2>/dev/null) &&\n' span_id:492) 
          (Token id:Id.Lit_Chars val:'\ttest "z$name" = zrefs/heads/both\n' span_id:493) (Token id:Id.Lit_Chars val:'\n' span_id:494)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout with ambiguous tag/branch names' span_id:501))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:505) (Token id:Id.Lit_Chars val:'\n' span_id:506) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:507) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:508) 
          (Token id:Id.Lit_Chars val:'\n' span_id:509) (Token id:Id.Lit_Chars val:'\tgit tag frotz side &&\n' span_id:510) 
          (Token id:Id.Lit_Chars val:'\tgit branch frotz master &&\n' span_id:511) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:512) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:513) (Token id:Id.Lit_Chars val:'\n' span_id:514) 
          (Token id:Id.Lit_Chars val:'\tgit checkout tags/frotz &&\n' span_id:515) (Token id:Id.Lit_Chars val:'\tH=$(git rev-parse --verify HEAD) &&\n' span_id:516) 
          (Token
            id: Id.Lit_Chars
            val: '\tS=$(git show-ref -s --verify refs/heads/side) &&\n'
            span_id: 517
          ) (Token id:Id.Lit_Chars val:'\ttest "z$H" = "z$S" &&\n' span_id:518) 
          (Token
            id: Id.Lit_Chars
            val: '\tif name=$(git symbolic-ref HEAD 2>/dev/null)\n'
            span_id: 519
          ) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:520) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "Bad -- should have detached"\n'
            span_id: 521
          ) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:522) 
          (Token id:Id.Lit_Chars val:'\telse\n' span_id:523) (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:524) 
          (Token id:Id.Lit_Chars val:'\tfi\n' span_id:525) (Token id:Id.Lit_Chars val:'\n' span_id:526)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'switch branches while in subdirectory' span_id:533))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:537) (Token id:Id.Lit_Chars val:'\n' span_id:538) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:539) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:540) 
          (Token id:Id.Lit_Chars val:'\n' span_id:541) (Token id:Id.Lit_Chars val:'\tmkdir subs &&\n' span_id:542) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:543) (Token id:Id.Lit_Chars val:'\t\tcd subs &&\n' span_id:544) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout side\n' span_id:545) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:546) 
          (Token id:Id.Lit_Chars val:'\t! test -f subs/one &&\n' span_id:547) (Token id:Id.Lit_Chars val:'\trm -fr subs\n' span_id:548) (Token id:Id.Lit_Chars val:'\n' span_id:549)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout specific path while in subdirectory' span_id:556))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:560) (Token id:Id.Lit_Chars val:'\n' span_id:561) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:562) (Token id:Id.Lit_Chars val:'\tgit checkout side &&\n' span_id:563) 
          (Token id:Id.Lit_Chars val:'\tmkdir subs &&\n' span_id:564) (Token id:Id.Lit_Chars val:'\t>subs/bero &&\n' span_id:565) 
          (Token id:Id.Lit_Chars val:'\tgit add subs/bero &&\n' span_id:566) (Token id:Id.Lit_Chars val:'\tgit commit -m "add subs/bero" &&\n' span_id:567) 
          (Token id:Id.Lit_Chars val:'\n' span_id:568) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:569) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p subs &&\n' span_id:570) (Token id:Id.Lit_Chars val:'\t(\n' span_id:571) 
          (Token id:Id.Lit_Chars val:'\t\tcd subs &&\n' span_id:572) (Token id:Id.Lit_Chars val:'\t\tgit checkout side -- bero\n' span_id:573) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\ttest -f subs/bero\n' span_id:575) 
          (Token id:Id.Lit_Chars val:'\n' span_id:576)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout w/--track sets up tracking' span_id:585))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:589) 
          (Token
            id: Id.Lit_Chars
            val: '    git config branch.autosetupmerge false &&\n'
            span_id: 590
          ) (Token id:Id.Lit_Chars val:'    git checkout master &&\n' span_id:591) 
          (Token id:Id.Lit_Chars val:'    git checkout --track -b track1 &&\n' span_id:592) (Token id:Id.Lit_Chars val:'    test "$(git config branch.track1.remote)" &&\n' span_id:593) 
          (Token
            id: Id.Lit_Chars
            val: '    test "$(git config branch.track1.merge)"'
            span_id: 594
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout w/autosetupmerge=always sets up tracking'
            span_id: 603
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:607) 
          (Token
            id: Id.Lit_Chars
            val: '    test_when_finished git config branch.autosetupmerge false &&\n'
            span_id: 608
          ) (Token id:Id.Lit_Chars val:'    git config branch.autosetupmerge always &&\n' span_id:609) 
          (Token id:Id.Lit_Chars val:'    git checkout master &&\n' span_id:610) (Token id:Id.Lit_Chars val:'    git checkout -b track2 &&\n' span_id:611) 
          (Token
            id: Id.Lit_Chars
            val: '    test "$(git config branch.track2.remote)" &&\n'
            span_id: 612
          ) (Token id:Id.Lit_Chars val:'    test "$(git config branch.track2.merge)"' span_id:613)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout w/--track from non-branch HEAD fails' span_id:620))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:624) 
          (Token id:Id.Lit_Chars val:'    git checkout master^0 &&\n' span_id:625) (Token id:Id.Lit_Chars val:'    test_must_fail git symbolic-ref HEAD &&\n' span_id:626) 
          (Token
            id: Id.Lit_Chars
            val: '    test_must_fail git checkout --track -b track &&\n'
            span_id: 627
          ) (Token id:Id.Lit_Chars val:'    test_must_fail git rev-parse --verify track &&\n' span_id:628) 
          (Token
            id: Id.Lit_Chars
            val: '    test_must_fail git symbolic-ref HEAD &&\n'
            span_id: 629
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    test "z$(git rev-parse master^0)" = "z$(git rev-parse HEAD)"\n'
            span_id: 630
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout w/--track from tag fails' span_id:637))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:641) 
          (Token id:Id.Lit_Chars val:'    git checkout master^0 &&\n' span_id:642) (Token id:Id.Lit_Chars val:'    test_must_fail git symbolic-ref HEAD &&\n' span_id:643) 
          (Token
            id: Id.Lit_Chars
            val: '    test_must_fail git checkout --track -b track frotz &&\n'
            span_id: 644
          ) (Token id:Id.Lit_Chars val:'    test_must_fail git rev-parse --verify track &&\n' span_id:645) 
          (Token
            id: Id.Lit_Chars
            val: '    test_must_fail git symbolic-ref HEAD &&\n'
            span_id: 646
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    test "z$(git rev-parse master^0)" = "z$(git rev-parse HEAD)"\n'
            span_id: 647
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'detach a symbolic link HEAD' span_id:654))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:658) 
          (Token id:Id.Lit_Chars val:'    git checkout master &&\n' span_id:659) (Token id:Id.Lit_Chars val:'    git config --bool core.prefersymlinkrefs yes &&\n' span_id:660) 
          (Token id:Id.Lit_Chars val:'    git checkout side &&\n' span_id:661) (Token id:Id.Lit_Chars val:'    git checkout master &&\n' span_id:662) 
          (Token id:Id.Lit_Chars val:'    it=$(git symbolic-ref HEAD) &&\n' span_id:663) (Token id:Id.Lit_Chars val:'    test "z$it" = zrefs/heads/master &&\n' span_id:664) 
          (Token
            id: Id.Lit_Chars
            val: '    here=$(git rev-parse --verify refs/heads/master) &&\n'
            span_id: 665
          ) (Token id:Id.Lit_Chars val:'    git checkout side^ &&\n' span_id:666) 
          (Token
            id: Id.Lit_Chars
            val: '    test "z$(git rev-parse --verify refs/heads/master)" = "z$here"\n'
            span_id: 667
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout with --track fakes a sensible -b <name>'
            span_id: 676
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:680) 
          (Token
            id: Id.Lit_Chars
            val: '    git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" &&\n'
            span_id: 681
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    git update-ref refs/remotes/origin/koala/bear renamer &&\n'
            span_id: 682
          ) (Token id:Id.Lit_Chars val:'\n' span_id:683) 
          (Token
            id: Id.Lit_Chars
            val: '    git checkout --track origin/koala/bear &&\n'
            span_id: 684
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&\n'
            span_id: 685
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)" &&\n'
            span_id: 686
          ) (Token id:Id.Lit_Chars val:'\n' span_id:687) 
          (Token
            id: Id.Lit_Chars
            val: '    git checkout master && git branch -D koala/bear &&\n'
            span_id: 688
          ) (Token id:Id.Lit_Chars val:'\n' span_id:689) 
          (Token
            id: Id.Lit_Chars
            val: '    git checkout --track refs/remotes/origin/koala/bear &&\n'
            span_id: 690
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&\n'
            span_id: 691
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)" &&\n'
            span_id: 692
          ) (Token id:Id.Lit_Chars val:'\n' span_id:693) 
          (Token
            id: Id.Lit_Chars
            val: '    git checkout master && git branch -D koala/bear &&\n'
            span_id: 694
          ) (Token id:Id.Lit_Chars val:'\n' span_id:695) 
          (Token
            id: Id.Lit_Chars
            val: '    git checkout --track remotes/origin/koala/bear &&\n'
            span_id: 696
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    test "refs/heads/koala/bear" = "$(git symbolic-ref HEAD)" &&\n'
            span_id: 697
          ) 
          (Token
            id: Id.Lit_Chars
            val: '    test "$(git rev-parse HEAD)" = "$(git rev-parse renamer)"\n'
            span_id: 698
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout with --track, but without -b, fails with too short tracked name'
            span_id: 707
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:711) 
          (Token
            id: Id.Lit_Chars
            val: '    test_must_fail git checkout --track renamer'
            span_id: 712
          )
        )
      }
    )
    (command.ShFunction
      name: setup_conflicting_index
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(rm)} {(-f)} {(.git/index)})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:O)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:734)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {(echo)} {(original)})
                                      (C {(git)} {(hash-object)} {(-w)} {(--stdin)})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          )
                        }
                      spids: [733]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:A)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:754)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {(echo)} {(ourside)})
                                      (C {(git)} {(hash-object)} {(-w)} {(--stdin)})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          )
                        }
                      spids: [753]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:B)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:774)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {(echo)} {(theirside)})
                                      (C {(git)} {(hash-object)} {(-w)} {(--stdin)})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          )
                        }
                      spids: [773]
                    )
                  ]
                )
                (command.Pipeline
                  children: [
                    (command.Subshell
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.AndOr
                              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                              children: [
                                (C {(echo)} {(DQ ('100644 ') ($ Id.VSub_DollarName '$A') (' 0\tfild'))})
                                (C {(echo)} {(DQ ('100644 ') ($ Id.VSub_DollarName '$O') (' 1\tfile'))})
                                (C {(echo)} {(DQ ('100644 ') ($ Id.VSub_DollarName '$A') (' 2\tfile'))})
                                (C {(echo)} {(DQ ('100644 ') ($ Id.VSub_DollarName '$B') (' 3\tfile'))})
                                (C {(echo)} {(DQ ('100644 ') ($ Id.VSub_DollarName '$A') (' 0\tfilf'))})
                              ]
                            )
                          ]
                        )
                    )
                    (C {(git)} {(update-index)} {(--index-info)})
                  ]
                  negated: F
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout an unmerged path should fail' span_id:865))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:869) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflicting_index &&\n' span_id:870) (Token id:Id.Lit_Chars val:'\techo "none of the above" >sample &&\n' span_id:871) 
          (Token id:Id.Lit_Chars val:'\tcat sample >fild &&\n' span_id:872) (Token id:Id.Lit_Chars val:'\tcat sample >file &&\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'\tcat sample >filf &&\n' span_id:874) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout fild file filf &&\n' span_id:875) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp sample fild &&\n' span_id:876) (Token id:Id.Lit_Chars val:'\ttest_cmp sample filf &&\n' span_id:877) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp sample file\n' span_id:878)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout with an unmerged path can be ignored' span_id:885))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:889) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflicting_index &&\n' span_id:890) (Token id:Id.Lit_Chars val:'\techo "none of the above" >sample &&\n' span_id:891) 
          (Token id:Id.Lit_Chars val:'\techo ourside >expect &&\n' span_id:892) (Token id:Id.Lit_Chars val:'\tcat sample >fild &&\n' span_id:893) 
          (Token id:Id.Lit_Chars val:'\tcat sample >file &&\n' span_id:894) (Token id:Id.Lit_Chars val:'\tcat sample >filf &&\n' span_id:895) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -f fild file filf &&\n' span_id:896) (Token id:Id.Lit_Chars val:'\ttest_cmp expect fild &&\n' span_id:897) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect filf &&\n' span_id:898) (Token id:Id.Lit_Chars val:'\ttest_cmp sample file\n' span_id:899)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout unmerged stage' span_id:906))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:910) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflicting_index &&\n' span_id:911) (Token id:Id.Lit_Chars val:'\techo "none of the above" >sample &&\n' span_id:912) 
          (Token id:Id.Lit_Chars val:'\techo ourside >expect &&\n' span_id:913) (Token id:Id.Lit_Chars val:'\tcat sample >fild &&\n' span_id:914) 
          (Token id:Id.Lit_Chars val:'\tcat sample >file &&\n' span_id:915) (Token id:Id.Lit_Chars val:'\tcat sample >filf &&\n' span_id:916) 
          (Token id:Id.Lit_Chars val:'\tgit checkout --ours . &&\n' span_id:917) (Token id:Id.Lit_Chars val:'\ttest_cmp expect fild &&\n' span_id:918) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect filf &&\n' span_id:919) (Token id:Id.Lit_Chars val:'\ttest_cmp expect file &&\n' span_id:920) 
          (Token id:Id.Lit_Chars val:'\tgit checkout --theirs file &&\n' span_id:921) (Token id:Id.Lit_Chars val:'\ttest ztheirside = "z$(cat file)"\n' span_id:922)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout with --merge' span_id:929))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:933) 
          (Token id:Id.Lit_Chars val:'\tsetup_conflicting_index &&\n' span_id:934) (Token id:Id.Lit_Chars val:'\techo "none of the above" >sample &&\n' span_id:935) 
          (Token id:Id.Lit_Chars val:'\techo ourside >expect &&\n' span_id:936) (Token id:Id.Lit_Chars val:'\tcat sample >fild &&\n' span_id:937) 
          (Token id:Id.Lit_Chars val:'\tcat sample >file &&\n' span_id:938) (Token id:Id.Lit_Chars val:'\tcat sample >filf &&\n' span_id:939) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -m -- fild file filf &&\n'
            span_id: 940
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:941) 
          (Token id:Id.Lit_Chars val:'\t\techo "<<<<<<< ours"\n' span_id:942) (Token id:Id.Lit_Chars val:'\t\techo ourside\n' span_id:943) 
          (Token id:Id.Lit_Chars val:'\t\techo "======="\n' span_id:944) (Token id:Id.Lit_Chars val:'\t\techo theirside\n' span_id:945) 
          (Token id:Id.Lit_Chars val:'\t\techo ">>>>>>> theirs"\n' span_id:946) (Token id:Id.Lit_Chars val:'\t) >merged &&\n' span_id:947) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect fild &&\n' span_id:948) (Token id:Id.Lit_Chars val:'\ttest_cmp expect filf &&\n' span_id:949) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp merged file\n' span_id:950)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout with --merge, in diff3 -m style' span_id:957))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:961) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config merge.conflictstyle diff3 &&\n'
            span_id: 962
          ) (Token id:Id.Lit_Chars val:'\tsetup_conflicting_index &&\n' span_id:963) 
          (Token id:Id.Lit_Chars val:'\techo "none of the above" >sample &&\n' span_id:964) (Token id:Id.Lit_Chars val:'\techo ourside >expect &&\n' span_id:965) 
          (Token id:Id.Lit_Chars val:'\tcat sample >fild &&\n' span_id:966) (Token id:Id.Lit_Chars val:'\tcat sample >file &&\n' span_id:967) 
          (Token id:Id.Lit_Chars val:'\tcat sample >filf &&\n' span_id:968) (Token id:Id.Lit_Chars val:'\tgit checkout -m -- fild file filf &&\n' span_id:969) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:970) (Token id:Id.Lit_Chars val:'\t\techo "<<<<<<< ours"\n' span_id:971) 
          (Token id:Id.Lit_Chars val:'\t\techo ourside\n' span_id:972) (Token id:Id.Lit_Chars val:'\t\techo "||||||| base"\n' span_id:973) 
          (Token id:Id.Lit_Chars val:'\t\techo original\n' span_id:974) (Token id:Id.Lit_Chars val:'\t\techo "======="\n' span_id:975) 
          (Token id:Id.Lit_Chars val:'\t\techo theirside\n' span_id:976) (Token id:Id.Lit_Chars val:'\t\techo ">>>>>>> theirs"\n' span_id:977) 
          (Token id:Id.Lit_Chars val:'\t) >merged &&\n' span_id:978) (Token id:Id.Lit_Chars val:'\ttest_cmp expect fild &&\n' span_id:979) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect filf &&\n' span_id:980) (Token id:Id.Lit_Chars val:'\ttest_cmp merged file\n' span_id:981)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout --conflict=merge, overriding config' span_id:988))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:992) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config merge.conflictstyle diff3 &&\n'
            span_id: 993
          ) (Token id:Id.Lit_Chars val:'\tsetup_conflicting_index &&\n' span_id:994) 
          (Token id:Id.Lit_Chars val:'\techo "none of the above" >sample &&\n' span_id:995) (Token id:Id.Lit_Chars val:'\techo ourside >expect &&\n' span_id:996) 
          (Token id:Id.Lit_Chars val:'\tcat sample >fild &&\n' span_id:997) (Token id:Id.Lit_Chars val:'\tcat sample >file &&\n' span_id:998) 
          (Token id:Id.Lit_Chars val:'\tcat sample >filf &&\n' span_id:999) (Token id:Id.Lit_Chars val:'\tgit checkout --conflict=merge -- fild file filf &&\n' span_id:1000) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1001) (Token id:Id.Lit_Chars val:'\t\techo "<<<<<<< ours"\n' span_id:1002) 
          (Token id:Id.Lit_Chars val:'\t\techo ourside\n' span_id:1003) (Token id:Id.Lit_Chars val:'\t\techo "======="\n' span_id:1004) 
          (Token id:Id.Lit_Chars val:'\t\techo theirside\n' span_id:1005) (Token id:Id.Lit_Chars val:'\t\techo ">>>>>>> theirs"\n' span_id:1006) 
          (Token id:Id.Lit_Chars val:'\t) >merged &&\n' span_id:1007) (Token id:Id.Lit_Chars val:'\ttest_cmp expect fild &&\n' span_id:1008) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect filf &&\n' span_id:1009) (Token id:Id.Lit_Chars val:'\ttest_cmp merged file\n' span_id:1010)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout --conflict=diff3' span_id:1017))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1021) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_unconfig merge.conflictstyle &&\n'
            span_id: 1022
          ) (Token id:Id.Lit_Chars val:'\tsetup_conflicting_index &&\n' span_id:1023) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "none of the above" >sample &&\n'
            span_id: 1024
          ) (Token id:Id.Lit_Chars val:'\techo ourside >expect &&\n' span_id:1025) 
          (Token id:Id.Lit_Chars val:'\tcat sample >fild &&\n' span_id:1026) (Token id:Id.Lit_Chars val:'\tcat sample >file &&\n' span_id:1027) 
          (Token id:Id.Lit_Chars val:'\tcat sample >filf &&\n' span_id:1028) (Token id:Id.Lit_Chars val:'\tgit checkout --conflict=diff3 -- fild file filf &&\n' span_id:1029) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1030) (Token id:Id.Lit_Chars val:'\t\techo "<<<<<<< ours"\n' span_id:1031) 
          (Token id:Id.Lit_Chars val:'\t\techo ourside\n' span_id:1032) (Token id:Id.Lit_Chars val:'\t\techo "||||||| base"\n' span_id:1033) 
          (Token id:Id.Lit_Chars val:'\t\techo original\n' span_id:1034) (Token id:Id.Lit_Chars val:'\t\techo "======="\n' span_id:1035) 
          (Token id:Id.Lit_Chars val:'\t\techo theirside\n' span_id:1036) (Token id:Id.Lit_Chars val:'\t\techo ">>>>>>> theirs"\n' span_id:1037) 
          (Token id:Id.Lit_Chars val:'\t) >merged &&\n' span_id:1038) (Token id:Id.Lit_Chars val:'\ttest_cmp expect fild &&\n' span_id:1039) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect filf &&\n' span_id:1040) (Token id:Id.Lit_Chars val:'\ttest_cmp merged file\n' span_id:1041)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'failing checkout -b should not break working tree'
            span_id: 1048
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1052) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:1053) (Token id:Id.Lit_Chars val:'\tgit symbolic-ref HEAD refs/heads/master &&\n' span_id:1054) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git checkout -b renamer side^ &&\n'
            span_id: 1055
          ) (Token id:Id.Lit_Chars val:'\ttest $(git symbolic-ref HEAD) = refs/heads/master &&\n' span_id:1056) 
          (Token id:Id.Lit_Chars val:'\tgit diff --exit-code &&\n' span_id:1057) (Token id:Id.Lit_Chars val:'\tgit diff --cached --exit-code\n' span_id:1058) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1059)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'switch out of non-branch' span_id:1066))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1070) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:1071) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:1072) 
          (Token id:Id.Lit_Chars val:'\techo modified >one &&\n' span_id:1073) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout renamer 2>error.log &&\n' span_id:1074) 
          (Token id:Id.Lit_Chars val:'\t! grep "^Previous HEAD" error.log\n' span_id:1075)
        )
      }
    )
    (command.Subshell
      command_list: 
        (command.CommandList
          children: [
            (C {(echo)} {(DQ ('#!') ($ Id.VSub_DollarName '$SHELL_PATH'))})
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1092)
                  fd: -1
                  here_begin: 
                    {
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\E' span_id:1093)
                      ) (OF)
                    }
                  here_end_span_id: 1108
                  stdin_parts: [
                    ('O=$1 A=$2 B=$3\n')
                    ('cat "$A" >.tmp\n')
                    ('exec >"$A"\n')
                    ("echo '<<<<<<< filfre-theirs'\n")
                    ('cat "$B"\n')
                    ("echo '||||||| filfre-common'\n")
                    ('cat "$O"\n')
                    ("echo '======='\n")
                    ('cat ".tmp"\n')
                    ("echo '>>>>>>> filfre-ours'\n")
                    ('rm -f .tmp\n')
                    ('exit 1\n')
                  ]
                )
              ]
            )
          ]
        )
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1111)
          fd: -1
          arg_word: {(filfre.sh)}
        )
      ]
    )
    (C {(chmod)} {(Id.Lit_Other '+') (x)} {(filfre.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'custom merge driver with checkout -m' span_id:1125))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1129) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1130) (Token id:Id.Lit_Chars val:'\n' span_id:1131) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config merge.filfre.driver "./filfre.sh %O %A %B" &&\n'
            span_id: 1132
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config merge.filfre.name "Feel-free merge driver" &&\n'
            span_id: 1133
          ) (Token id:Id.Lit_Chars val:'\tgit config merge.filfre.recursive binary &&\n' span_id:1134) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "arm merge=filfre" >.gitattributes &&\n'
            span_id: 1135
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1136) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b left &&\n' span_id:1137) (Token id:Id.Lit_Chars val:'\techo neutral >arm &&\n' span_id:1138) 
          (Token id:Id.Lit_Chars val:'\tgit add arm .gitattributes &&\n' span_id:1139) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1140) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m neutral &&\n' span_id:1141) (Token id:Id.Lit_Chars val:'\tgit branch right &&\n' span_id:1142) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1143) (Token id:Id.Lit_Chars val:'\techo left >arm &&\n' span_id:1144) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1145) (Token id:Id.Lit_Chars val:'\tgit commit -a -m left &&\n' span_id:1146) 
          (Token id:Id.Lit_Chars val:'\tgit checkout right &&\n' span_id:1147) (Token id:Id.Lit_Chars val:'\n' span_id:1148) 
          (Token id:Id.Lit_Chars val:'\techo right >arm &&\n' span_id:1149) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1150) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m right &&\n' span_id:1151) (Token id:Id.Lit_Chars val:'\n' span_id:1152) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge left &&\n' span_id:1153) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1154) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tfor t in filfre-common left right\n'
            span_id: 1155
          ) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:1156) 
          (Token id:Id.Lit_Chars val:'\t\t\tgrep $t arm || exit 1\n' span_id:1157) (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:1158) 
          (Token id:Id.Lit_Chars val:'\t\texit 0\n' span_id:1159) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1160) (Token id:Id.Lit_Chars val:'\n' span_id:1161) 
          (Token id:Id.Lit_Chars val:'\tmv arm expect &&\n' span_id:1162) (Token id:Id.Lit_Chars val:'\tgit checkout -m arm &&\n' span_id:1163) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect arm\n' span_id:1164)
        )
      }
    )
    (C {(test_done)})
  ]
)