(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git rebase --merge test">)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:T)
          op: Equal
          rhs: {(DQ ("A quick brown fox\n") ("jumps over the lazy dog."))}
          spids: [24]
        )
      ]
      spids: [24]
    )
    (ForEach
      iter_name: i
      iter_words: [{(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)} {(10)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [(C {(echo)} {(DQ ($ VSub_Name "$i") (" ") ($ VSub_Name "$T"))})]
          spids: [56 67]
        )
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(original)} spids:[69])]
      spids: [35 -1]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <"\n"> <"\tgit add original &&\n"> <"\tgit commit -m\"initial\" &&\n"> 
          <"\tgit branch side &&\n"> <"\techo \"11 $T\" >>original &&\n"> <"\tgit commit -a -m\"master updates a bit.\" &&\n"> <"\n"> 
          <"\techo \"12 $T\" >>original &&\n"> <"\tgit commit -a -m\"master updates a bit more.\" &&\n"> <"\n"> <"\tgit checkout side &&\n"> 
          <"\t(echo \"0 $T\" ; cat original) >renamed &&\n"> <"\tgit add renamed &&\n"> <"\tgit update-index --force-remove original &&\n"> 
          <"\tgit commit -a -m\"side renames and edits.\" &&\n"> <"\n"> <"\ttr \"[a-z]\" \"[A-Z]\" <original >newfile &&\n"> <"\tgit add newfile &&\n"> 
          <"\tgit commit -a -m\"side edits further.\" &&\n"> <"\tgit branch second-side &&\n"> <"\n"> <"\ttr \"[a-m]\" \"[A-M]\" <original >newfile &&\n"> 
          <"\trm -f original &&\n"> <"\tgit commit -a -m\"side edits once again.\" &&\n"> <"\n"> <"\tgit branch test-rebase side &&\n"> 
          <"\tgit branch test-rebase-pick side &&\n"> <"\tgit branch test-reference-pick side &&\n"> <"\tgit branch test-conflicts side &&\n"> 
          <"\tgit checkout -b test-merge side\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"reference merge">)} 
      {(SQ <"\n"> <"\tgit merge -s recursive -m \"reference merge\" master\n">)}
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:PRE_REBASE)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(test-rebase)})])
                left_token: <Left_CommandSub "$(">
                spids: [124 130]
              )
            }
          spids: [123]
        )
      ]
      spids: [123]
    )
    (C {(test_expect_success)} {(rebase)} 
      {(SQ <"\n"> <"\tgit checkout test-rebase &&\n"> <"\tGIT_TRACE=1 git rebase --merge master\n">)}
    )
    (C {(test_expect_success)} {(SQ <"test-rebase@{1} is pre rebase">)} 
      {(SQ <"\n"> <"\ttest $PRE_REBASE = $(git rev-parse test-rebase@{1})\n">)}
    )
    (C {(test_expect_success)} {(SQ <"merge and rebase should match">)} 
      {
        (SQ <"\n"> <"\tgit diff-tree -r test-rebase test-merge >difference &&\n"> 
          <"\tif test -s difference\n"> <"\tthen\n"> <"\t\tcat difference\n"> <"\t\t(exit 1)\n"> <"\telse\n"> <"\t\techo happy\n"> <"\tfi\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase the other way">)} 
      {(SQ <"\n"> <"\tgit reset --hard master &&\n"> <"\tgit rebase --merge side\n">)}
    )
    (C {(test_expect_success)} {(SQ <"rebase -Xtheirs">)} 
      {
        (SQ <"\n"> <"\tgit checkout -b conflicting master~2 &&\n"> 
          <"\techo \"AB $T\" >> original &&\n"> <"\tgit commit -mconflicting original &&\n"> <"\tgit rebase -Xtheirs master &&\n"> 
          <"\tgrep AB original &&\n"> <"\t! grep 11 original\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase -Xtheirs from orphan">)} 
      {
        (SQ <"\n"> <"\tgit checkout --orphan orphan-conflicting master~2 &&\n"> 
          <"\techo \"AB $T\" >> original &&\n"> <"\tgit commit -morphan-conflicting original &&\n"> <"\tgit rebase -Xtheirs master &&\n"> 
          <"\tgrep AB original &&\n"> <"\t! grep 11 original\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"merge and rebase should match">)} 
      {
        (SQ <"\n"> <"\tgit diff-tree -r test-rebase test-merge >difference &&\n"> 
          <"\tif test -s difference\n"> <"\tthen\n"> <"\t\tcat difference\n"> <"\t\t(exit 1)\n"> <"\telse\n"> <"\t\techo happy\n"> <"\tfi\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"picking rebase">)} 
      {
        (SQ <"\n"> <"\tgit reset --hard side &&\n"> <"\tgit rebase --merge --onto master side^^ &&\n"> 
          <"\tmb=$(git merge-base master HEAD) &&\n"> <"\tif test \"$mb\" = \"$(git rev-parse master)\"\n"> <"\tthen\n"> <"\t\techo happy\n"> <"\telse\n"> 
          <"\t\tgit show-branch\n"> <"\t\t(exit 1)\n"> <"\tfi &&\n"> <"\tf=$(git diff-tree --name-only HEAD^ HEAD) &&\n"> 
          <"\tg=$(git diff-tree --name-only HEAD^^ HEAD^) &&\n"> <"\tcase \"$f,$g\" in\n"> <"\tnewfile,newfile)\n"> <"\t\techo happy ;;\n"> <"\t*)\n"> 
          <"\t\techo \"$f\"\n"> <"\t\techo \"$g\"\n"> <"\t\t(exit 1)\n"> <"\tesac\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase -s funny -Xopt">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished \"rm -fr test-bin funny.was.run\" &&\n"> 
          <"\tmkdir test-bin &&\n"> <"\tcat >test-bin/git-merge-funny <<-EOF &&\n"> <"\t#!$SHELL_PATH\n"> 
          <"\tcase \"\\$1\" in --opt) ;; *) exit 2 ;; esac\n"> <"\tshift &&\n"> <"\t>funny.was.run &&\n"> <"\texec git merge-recursive \"\\$@\"\n"> <"\tEOF\n"> 
          <"\tchmod +x test-bin/git-merge-funny &&\n"> <"\tgit reset --hard &&\n"> <"\tgit checkout -b test-funny master^ &&\n"> <"\ttest_commit funny &&\n"> 
          <"\t(\n"> <"\t\tPATH=./test-bin:$PATH\n"> <"\t\tgit rebase -s funny -Xopt master\n"> <"\t) &&\n"> 
          <"\ttest -f funny.was.run\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase --skip works with two conflicts in a row">)} 
      {
        (SQ <"\n"> <"\tgit checkout second-side  &&\n"> <"\ttr \"[A-Z]\" \"[a-z]\" <newfile >tmp &&\n"> 
          <"\tmv tmp newfile &&\n"> <"\tgit commit -a -m\"edit conflicting with side\" &&\n"> 
          <"\ttr \"[d-f]\" \"[D-F]\" <newfile >tmp &&\n"> <"\tmv tmp newfile &&\n"> <"\tgit commit -a -m\"another edit conflicting with side\" &&\n"> 
          <"\ttest_must_fail git rebase --merge test-conflicts &&\n"> <"\ttest_must_fail git rebase --skip &&\n"> <"\tgit rebase --skip\n">
        )
      }
    )
    (C {(test_done)})
  ]
)