(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"Test rebasing, stashing, etc. with submodules">)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <"\n"> <"\n"> <"\techo file > file &&\n"> <"\tgit add file &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m initial &&\n"> <"\tgit clone . submodule &&\n"> <"\tgit add submodule &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m submodule &&\n"> <"\techo second line >> file &&\n"> <"\t(cd submodule && git pull) &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m file-and-submodule -a &&\n"> <"\tgit branch added-submodule\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase with a dirty submodule">)} 
      {
        (SQ <"\n"> <"\n"> <"\t(cd submodule &&\n"> <"\t echo 3rd line >> file &&\n"> 
          <"\t test_tick &&\n"> <"\t git commit -m fork -a) &&\n"> <"\techo unrelated >> file2 &&\n"> <"\tgit add file2 &&\n"> 
          <"\ttest_tick &&\n"> <"\tgit commit -m unrelated file2 &&\n"> <"\techo other line >> file &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m update file &&\n"> <"\tCURRENT=$(cd submodule && git rev-parse HEAD) &&\n"> 
          <"\tEXPECTED=$(git rev-parse HEAD~2:submodule) &&\n"> <"\tGIT_TRACE=1 git rebase --onto HEAD~2 HEAD^ &&\n"> 
          <"\tSTORED=$(git rev-parse HEAD:submodule) &&\n"> <"\ttest $EXPECTED = $STORED &&\n"> <"\ttest $CURRENT = $(cd submodule && git rev-parse HEAD)\n"> 
          <"\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(fake-editor.sh)} spids:[80])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {("#!/bin/sh\n") ("echo $EDITOR_TEXT\n")}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [84]
        )
      ]
    )
    (C {(chmod)} {(a) (Lit_Other "+") (x)} {(fake-editor.sh)})
    (C {(test_expect_success)} {(SQ <"interactive rebase with a dirty submodule">)} 
      {
        (SQ <"\n"> <"\n"> <"\ttest submodule = $(git diff --name-only) &&\n"> 
          <"\tHEAD=$(git rev-parse HEAD) &&\n"> <"\tGIT_EDITOR=\"\\\"$(pwd)/fake-editor.sh\\\"\" EDITOR_TEXT=\"pick $HEAD\" \\\n"> 
          <"\t\tgit rebase -i HEAD^ &&\n"> <"\ttest submodule = $(git diff --name-only)\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase with dirty file and submodule fails">)} 
      {
        (SQ <"\n"> <"\n"> <"\techo yet another line >> file &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m next file &&\n"> <"\techo rewrite > file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m rewrite file &&\n"> 
          <"\techo dirty > file &&\n"> <"\ttest_must_fail git rebase --onto HEAD~2 HEAD^\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"stash with a dirty submodule">)} 
      {
        (SQ <"\n"> <"\n"> <"\techo new > file &&\n"> 
          <"\tCURRENT=$(cd submodule && git rev-parse HEAD) &&\n"> <"\tgit stash &&\n"> <"\ttest new != $(cat file) &&\n"> 
          <"\ttest submodule = $(git diff --name-only) &&\n"> <"\ttest $CURRENT = $(cd submodule && git rev-parse HEAD) &&\n"> <"\tgit stash apply &&\n"> 
          <"\ttest new = $(cat file) &&\n"> <"\ttest $CURRENT = $(cd submodule && git rev-parse HEAD)\n"> <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebasing submodule that should conflict">)} 
      {
        (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit checkout added-submodule &&\n"> 
          <"\tgit add submodule &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m third &&\n"> <"\t(\n"> <"\t\tcd submodule &&\n"> 
          <"\t\tgit commit --allow-empty -m extra\n"> <"\t) &&\n"> <"\tgit add submodule &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m fourth &&\n"> <"\n"> 
          <"\ttest_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 &&\n"> <"\tgit ls-files -s submodule >actual &&\n"> <"\t(\n"> <"\t\tcd submodule &&\n"> 
          <"\t\techo \"160000 $(git rev-parse HEAD^) 1\tsubmodule\" &&\n"> <"\t\techo \"160000 $(git rev-parse HEAD^^) 2\tsubmodule\" &&\n"> 
          <"\t\techo \"160000 $(git rev-parse HEAD) 3\tsubmodule\"\n"> <"\t) >expect &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_done)})
  ]
)