(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: 'Test rebasing, stashing, etc. with submodules'
                  span_id: 15
                )
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:29) (Token id:Id.Lit_Chars val:'\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\techo file > file &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tgit clone . submodule &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\tgit add submodule &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit commit -m submodule &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\techo second line >> file &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\t(cd submodule && git pull) &&\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tgit commit -m file-and-submodule -a &&\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\tgit branch added-submodule\n' span_id:43) (Token id:Id.Lit_Chars val:'\n' span_id:44)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rebase with a dirty submodule' span_id:51))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:55) (Token id:Id.Lit_Chars val:'\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\t(cd submodule &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\t echo 3rd line >> file &&\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\t test_tick &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\t git commit -m fork -a) &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\techo unrelated >> file2 &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\tgit commit -m unrelated file2 &&\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\techo other line >> file &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m update file &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tCURRENT=$(cd submodule && git rev-parse HEAD) &&\n' span_id:68) 
          (Token
            id: Id.Lit_Chars
            val: '\tEXPECTED=$(git rev-parse HEAD~2:submodule) &&\n'
            span_id: 69
          ) (Token id:Id.Lit_Chars val:'\tGIT_TRACE=1 git rebase --onto HEAD~2 HEAD^ &&\n' span_id:70) 
          (Token
            id: Id.Lit_Chars
            val: '\tSTORED=$(git rev-parse HEAD:submodule) &&\n'
            span_id: 71
          ) (Token id:Id.Lit_Chars val:'\ttest $EXPECTED = $STORED &&\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $CURRENT = $(cd submodule && git rev-parse HEAD)\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\n' span_id:74)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:80)
          fd: -1
          arg_word: {(fake-editor.sh)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:84)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:86)) (OF)}
          here_end_span_id: 91
          stdin_parts: [('#!/bin/sh\n') ('echo $EDITOR_TEXT\n')]
        )
      ]
    )
    (C {(chmod)} {(a) (Id.Lit_Other '+') (x)} {(fake-editor.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'interactive rebase with a dirty submodule' span_id:104))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:108) (Token id:Id.Lit_Chars val:'\n' span_id:109) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest submodule = $(git diff --name-only) &&\n'
            span_id: 110
          ) (Token id:Id.Lit_Chars val:'\tHEAD=$(git rev-parse HEAD) &&\n' span_id:111) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_EDITOR="\\"$(pwd)/fake-editor.sh\\"" EDITOR_TEXT="pick $HEAD" \\\n'
            span_id: 112
          ) (Token id:Id.Lit_Chars val:'\t\tgit rebase -i HEAD^ &&\n' span_id:113) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest submodule = $(git diff --name-only)\n'
            span_id: 114
          ) (Token id:Id.Lit_Chars val:'\n' span_id:115)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rebase with dirty file and submodule fails' span_id:122))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:126) (Token id:Id.Lit_Chars val:'\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\techo yet another line >> file &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m next file &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\techo rewrite > file &&\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\tgit commit -m rewrite file &&\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\techo dirty > file &&\n' span_id:134) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase --onto HEAD~2 HEAD^\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\n' span_id:136)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash with a dirty submodule' span_id:143))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) (Token id:Id.Lit_Chars val:'\n' span_id:148) 
          (Token id:Id.Lit_Chars val:'\techo new > file &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\tCURRENT=$(cd submodule && git rev-parse HEAD) &&\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\ttest new != $(cat file) &&\n' span_id:152) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest submodule = $(git diff --name-only) &&\n'
            span_id: 153
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $CURRENT = $(cd submodule && git rev-parse HEAD) &&\n'
            span_id: 154
          ) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'\ttest new = $(cat file) &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\ttest $CURRENT = $(cd submodule && git rev-parse HEAD)\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\n' span_id:158)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rebasing submodule that should conflict' span_id:165))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\tgit checkout added-submodule &&\n' span_id:171) 
          (Token id:Id.Lit_Chars val:'\tgit add submodule &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m third &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\t(\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\t\tcd submodule &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\t\tgit commit --allow-empty -m extra\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\tgit add submodule &&\n' span_id:179) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:180) (Token id:Id.Lit_Chars val:'\tgit commit -m fourth &&\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\n' span_id:182) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 &&\n' span_id:183) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-files -s submodule >actual &&\n'
            span_id: 184
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:185) 
          (Token id:Id.Lit_Chars val:'\t\tcd submodule &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\t\techo "160000 $(git rev-parse HEAD^) 1\tsubmodule" &&\n' span_id:187) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "160000 $(git rev-parse HEAD^^) 2\tsubmodule" &&\n'
            span_id: 188
          ) (Token id:Id.Lit_Chars val:'\t\techo "160000 $(git rev-parse HEAD) 3\tsubmodule"\n' span_id:189) 
          (Token id:Id.Lit_Chars val:'\t) >expect &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:191)
        )
      }
    )
    (C {(test_done)})
  ]
)