(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 rebase --merge test' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:T)
          op: assign_op.Equal
          rhs: {(DQ ('A quick brown fox\n') ('jumps over the lazy dog.'))}
          spids: [24]
        )
      ]
    )
    (command.ForEach
      iter_name: i
      iter_words: [{(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)} {(10)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [(C {(echo)} {(DQ ($ Id.VSub_DollarName '$i') (' ') ($ Id.VSub_DollarName '$T'))})]
        )
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:69)
          fd: -1
          arg_word: {(original)}
        )
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\tgit add original &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\tgit commit -m"initial" &&\n' span_id:80) 
          (Token id:Id.Lit_Chars val:'\tgit branch side &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\techo "11 $T" >>original &&\n' span_id:82) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -a -m"master updates a bit." &&\n'
            span_id: 83
          ) (Token id:Id.Lit_Chars val:'\n' span_id:84) 
          (Token id:Id.Lit_Chars val:'\techo "12 $T" >>original &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"master updates a bit more." &&\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\n' span_id:87) (Token id:Id.Lit_Chars val:'\tgit checkout side &&\n' span_id:88) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo "0 $T" ; cat original) >renamed &&\n'
            span_id: 89
          ) (Token id:Id.Lit_Chars val:'\tgit add renamed &&\n' span_id:90) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --force-remove original &&\n'
            span_id: 91
          ) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"side renames and edits." &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\ttr "[a-z]" "[A-Z]" <original >newfile &&\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\tgit add newfile &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"side edits further." &&\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\tgit branch second-side &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\n' span_id:98) 
          (Token
            id: Id.Lit_Chars
            val: '\ttr "[a-m]" "[A-M]" <original >newfile &&\n'
            span_id: 99
          ) (Token id:Id.Lit_Chars val:'\trm -f original &&\n' span_id:100) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -a -m"side edits once again." &&\n'
            span_id: 101
          ) (Token id:Id.Lit_Chars val:'\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\tgit branch test-rebase side &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\tgit branch test-rebase-pick side &&\n' span_id:104) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit branch test-reference-pick side &&\n'
            span_id: 105
          ) (Token id:Id.Lit_Chars val:'\tgit branch test-conflicts side &&\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b test-merge side\n' span_id:107)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'reference merge' span_id:114))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:118) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge -s recursive -m "reference merge" master\n'
            span_id: 119
          )
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PRE_REBASE)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:124)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(rev-parse)} {(test-rebase)})]
                  )
              )
            }
          spids: [123]
        )
      ]
    )
    (C {(test_expect_success)} {(rebase)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\tgit checkout test-rebase &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tGIT_TRACE=1 git rebase --merge master\n' span_id:139)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'test-rebase@{1} is pre rebase' span_id:146))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:150) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $PRE_REBASE = $(git rev-parse test-rebase@{1})\n'
            span_id: 151
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge and rebase should match' span_id:158))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:162) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -r test-rebase test-merge >difference &&\n'
            span_id: 163
          ) (Token id:Id.Lit_Chars val:'\tif test -s difference\n' span_id:164) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:165) (Token id:Id.Lit_Chars val:'\t\tcat difference\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'\t\t(exit 1)\n' span_id:167) (Token id:Id.Lit_Chars val:'\telse\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\t\techo happy\n' span_id:169) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:170)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rebase the other way' span_id:177))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:182) (Token id:Id.Lit_Chars val:'\tgit rebase --merge side\n' span_id:183)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rebase -Xtheirs' span_id:190))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:194) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -b conflicting master~2 &&\n'
            span_id: 195
          ) (Token id:Id.Lit_Chars val:'\techo "AB $T" >> original &&\n' span_id:196) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -mconflicting original &&\n'
            span_id: 197
          ) (Token id:Id.Lit_Chars val:'\tgit rebase -Xtheirs master &&\n' span_id:198) 
          (Token id:Id.Lit_Chars val:'\tgrep AB original &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\t! grep 11 original\n' span_id:200)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rebase -Xtheirs from orphan' span_id:207))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:211) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout --orphan orphan-conflicting master~2 &&\n'
            span_id: 212
          ) (Token id:Id.Lit_Chars val:'\techo "AB $T" >> original &&\n' span_id:213) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -morphan-conflicting original &&\n'
            span_id: 214
          ) (Token id:Id.Lit_Chars val:'\tgit rebase -Xtheirs master &&\n' span_id:215) 
          (Token id:Id.Lit_Chars val:'\tgrep AB original &&\n' span_id:216) (Token id:Id.Lit_Chars val:'\t! grep 11 original\n' span_id:217)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge and rebase should match' span_id:224))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:228) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree -r test-rebase test-merge >difference &&\n'
            span_id: 229
          ) (Token id:Id.Lit_Chars val:'\tif test -s difference\n' span_id:230) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:231) (Token id:Id.Lit_Chars val:'\t\tcat difference\n' span_id:232) 
          (Token id:Id.Lit_Chars val:'\t\t(exit 1)\n' span_id:233) (Token id:Id.Lit_Chars val:'\telse\n' span_id:234) 
          (Token id:Id.Lit_Chars val:'\t\techo happy\n' span_id:235) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:236)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'picking rebase' span_id:243))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard side &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\tgit rebase --merge --onto master side^^ &&\n' span_id:249) 
          (Token id:Id.Lit_Chars val:'\tmb=$(git merge-base master HEAD) &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\tif test "$mb" = "$(git rev-parse master)"\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'\tthen\n' span_id:252) (Token id:Id.Lit_Chars val:'\t\techo happy\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\telse\n' span_id:254) (Token id:Id.Lit_Chars val:'\t\tgit show-branch\n' span_id:255) 
          (Token id:Id.Lit_Chars val:'\t\t(exit 1)\n' span_id:256) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:257) 
          (Token
            id: Id.Lit_Chars
            val: '\tf=$(git diff-tree --name-only HEAD^ HEAD) &&\n'
            span_id: 258
          ) (Token id:Id.Lit_Chars val:'\tg=$(git diff-tree --name-only HEAD^^ HEAD^) &&\n' span_id:259) 
          (Token id:Id.Lit_Chars val:'\tcase "$f,$g" in\n' span_id:260) (Token id:Id.Lit_Chars val:'\tnewfile,newfile)\n' span_id:261) 
          (Token id:Id.Lit_Chars val:'\t\techo happy ;;\n' span_id:262) (Token id:Id.Lit_Chars val:'\t*)\n' span_id:263) 
          (Token id:Id.Lit_Chars val:'\t\techo "$f"\n' span_id:264) (Token id:Id.Lit_Chars val:'\t\techo "$g"\n' span_id:265) 
          (Token id:Id.Lit_Chars val:'\t\t(exit 1)\n' span_id:266) (Token id:Id.Lit_Chars val:'\tesac\n' span_id:267)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rebase -s funny -Xopt' span_id:274))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:278) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -fr test-bin funny.was.run" &&\n'
            span_id: 279
          ) (Token id:Id.Lit_Chars val:'\tmkdir test-bin &&\n' span_id:280) 
          (Token
            id: Id.Lit_Chars
            val: '\tcat >test-bin/git-merge-funny <<-EOF &&\n'
            span_id: 281
          ) (Token id:Id.Lit_Chars val:'\t#!$SHELL_PATH\n' span_id:282) 
          (Token
            id: Id.Lit_Chars
            val: '\tcase "\\$1" in --opt) ;; *) exit 2 ;; esac\n'
            span_id: 283
          ) (Token id:Id.Lit_Chars val:'\tshift &&\n' span_id:284) 
          (Token id:Id.Lit_Chars val:'\t>funny.was.run &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\texec git merge-recursive "\\$@"\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:287) (Token id:Id.Lit_Chars val:'\tchmod +x test-bin/git-merge-funny &&\n' span_id:288) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\tgit checkout -b test-funny master^ &&\n' span_id:290) 
          (Token id:Id.Lit_Chars val:'\ttest_commit funny &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\t(\n' span_id:292) 
          (Token id:Id.Lit_Chars val:'\t\tPATH=./test-bin:$PATH\n' span_id:293) (Token id:Id.Lit_Chars val:'\t\tgit rebase -s funny -Xopt master\n' span_id:294) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\ttest -f funny.was.run\n' span_id:296)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rebase --skip works with two conflicts in a row' span_id:303))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:307) 
          (Token id:Id.Lit_Chars val:'\tgit checkout second-side  &&\n' span_id:308) (Token id:Id.Lit_Chars val:'\ttr "[A-Z]" "[a-z]" <newfile >tmp &&\n' span_id:309) 
          (Token id:Id.Lit_Chars val:'\tmv tmp newfile &&\n' span_id:310) (Token id:Id.Lit_Chars val:'\tgit commit -a -m"edit conflicting with side" &&\n' span_id:311) 
          (Token id:Id.Lit_Chars val:'\ttr "[d-f]" "[D-F]" <newfile >tmp &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\tmv tmp newfile &&\n' span_id:313) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -a -m"another edit conflicting with side" &&\n'
            span_id: 314
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase --merge test-conflicts &&\n' span_id:315) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase --skip &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\tgit rebase --skip\n' span_id:317)
        )
      }
    )
    (C {(test_done)})
  ]
)