(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git status for submodule">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: test_create_repo_with_commit
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(test_create_repo)} {(DQ ($ VSub_Number "$1"))})
                (Subshell
                  child: 
                    (AndOr
                      children: [
                        (C {(cd)} {(DQ ($ VSub_Number "$1"))})
                        (AndOr
                          children: [
                            (SimpleCommand
                              words: [{(Lit_Other ":")}]
                              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(bar)} spids:[46])]
                            )
                            (AndOr
                              children: [
                                (C {(git)} {(add)} {(bar)})
                                (AndOr
                                  children: [
                                    (C {(git)} {(commit)} {(-m)} {(DQ (" Add bar"))})
                                    (AndOr
                                      children: [
                                        (SimpleCommand
                                          words: [{(Lit_Other ":")}]
                                          redirects: [
                                            (Redir
                                              op_id: Redir_Great
                                              fd: -1
                                              arg_word: {(foo)}
                                              spids: [76]
                                            )
                                          ]
                                        )
                                        (AndOr
                                          children: [
                                            (C {(git)} {(add)} {(foo)})
                                            (C {(git)} {(commit)} {(-m)} {(DQ (" Add foo"))})
                                          ]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  spids: [32 102]
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [20]
        )
      spids: [15 19]
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <"\n"> <"\ttest_create_repo_with_commit sub &&\n"> <"\techo output > .gitignore &&\n"> 
          <"\tgit add sub .gitignore &&\n"> <"\tgit commit -m \"Add submodule sub\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status clean">)} 
      {(SQ <"\n"> <"\tgit status >output &&\n"> <"\ttest_i18ngrep \"nothing to commit\" output\n">)}
    )
    (C {(test_expect_success)} {(SQ <"commit --dry-run -a clean">)} 
      {
        (SQ <"\n"> <"\ttest_must_fail git commit --dry-run -a >output &&\n"> 
          <"\ttest_i18ngrep \"nothing to commit\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with modified file in submodule">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard) &&\n"> <"\techo \"changed\" >sub/foo &&\n"> 
          <"\tgit status >output &&\n"> <"\ttest_i18ngrep \"modified:   sub (modified content)\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with modified file in submodule (porcelain)">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard) &&\n"> <"\techo \"changed\" >sub/foo &&\n"> 
          <"\tgit status --porcelain >output &&\n"> <"\tdiff output - <<-\\EOF\n"> <"\t M sub\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with added file in submodule">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\tgit status >output &&\n"> <"\ttest_i18ngrep \"modified:   sub (modified content)\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with added file in submodule (porcelain)">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\tgit status --porcelain >output &&\n"> <"\tdiff output - <<-\\EOF\n"> <"\t M sub\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with untracked file in submodule">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard) &&\n"> <"\techo \"content\" >sub/new-file &&\n"> 
          <"\tgit status >output &&\n"> <"\ttest_i18ngrep \"modified:   sub (untracked content)\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status -uno with untracked file in submodule">)} 
      {
        (SQ <"\n"> <"\tgit status -uno >output &&\n"> 
          <"\ttest_i18ngrep \"^nothing to commit\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with untracked file in submodule (porcelain)">)} 
      {
        (SQ <"\n"> <"\tgit status --porcelain >output &&\n"> <"\tdiff output - <<-\\EOF\n"> 
          <"\t M sub\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with added and untracked file in submodule">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\techo \"content\" >sub/new-file &&\n"> <"\tgit status >output &&\n"> 
          <"\ttest_i18ngrep \"modified:   sub (modified content, untracked content)\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with added and untracked file in submodule (porcelain)">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\techo \"content\" >sub/new-file &&\n"> <"\tgit status --porcelain >output &&\n"> <"\tdiff output - <<-\\EOF\n"> <"\t M sub\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with modified file in modified submodule">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard) &&\n"> <"\trm sub/new-file &&\n"> 
          <"\t(cd sub && echo \"next change\" >foo && git commit -m \"next change\" foo) &&\n"> <"\techo \"changed\" >sub/foo &&\n"> <"\tgit status >output &&\n"> 
          <"\ttest_i18ngrep \"modified:   sub (new commits, modified content)\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with modified file in modified submodule (porcelain)">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard) &&\n"> <"\techo \"changed\" >sub/foo &&\n"> 
          <"\tgit status --porcelain >output &&\n"> <"\tdiff output - <<-\\EOF\n"> <"\t M sub\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with added file in modified submodule">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\tgit status >output &&\n"> <"\ttest_i18ngrep \"modified:   sub (new commits, modified content)\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with added file in modified submodule (porcelain)">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\tgit status --porcelain >output &&\n"> <"\tdiff output - <<-\\EOF\n"> <"\t M sub\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with untracked file in modified submodule">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard) &&\n"> <"\techo \"content\" >sub/new-file &&\n"> 
          <"\tgit status >output &&\n"> <"\ttest_i18ngrep \"modified:   sub (new commits, untracked content)\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with untracked file in modified submodule (porcelain)">)} 
      {
        (SQ <"\n"> <"\tgit status --porcelain >output &&\n"> <"\tdiff output - <<-\\EOF\n"> 
          <"\t M sub\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with added and untracked file in modified submodule">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\techo \"content\" >sub/new-file &&\n"> <"\tgit status >output &&\n"> 
          <
"\ttest_i18ngrep \"modified:   sub (new commits, modified content, untracked content)\" output\n"
          >
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <"status with added and untracked file in modified submodule (porcelain)">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\techo \"content\" >sub/new-file &&\n"> <"\tgit status --porcelain >output &&\n"> <"\tdiff output - <<-\\EOF\n"> <"\t M sub\n"> <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"setup .git file for sub">)} 
      {
        (SQ <"\n"> <"\t(cd sub &&\n"> <"\t rm -f new-file\n"> <"\t REAL=\"$(pwd)/../.real\" &&\n"> 
          <"\t mv .git \"$REAL\"\n"> <"\t echo \"gitdir: $REAL\" >.git) &&\n"> <"\t echo .real >>.gitignore &&\n"> 
          <"\t git commit -m \"added .real to .gitignore\" .gitignore\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"status with added file in modified submodule with .git file">)} 
      {
        (SQ <"\n"> <"\t(cd sub && git reset --hard && echo >foo && git add foo) &&\n"> 
          <"\tgit status >output &&\n"> <"\ttest_i18ngrep \"modified:   sub (new commits, modified content)\" output\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rm submodule contents">)} 
      {(SQ <"\n"> <"\trm -rf sub/* sub/.git\n">)}
    )
    (C {(test_expect_success)} {(SQ <"status clean (empty submodule dir)">)} 
      {(SQ <"\n"> <"\tgit status >output &&\n"> <"\ttest_i18ngrep \"nothing to commit\" output\n">)}
    )
    (C {(test_expect_success)} {(SQ <"status -a clean (empty submodule dir)">)} 
      {
        (SQ <"\n"> <"\ttest_must_fail git commit --dry-run -a >output &&\n"> 
          <"\ttest_i18ngrep \"nothing to commit\" output\n">
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(status_expect)} spids:[483])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {("AA .gitmodules\n") ("A  sub1\n")}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [486]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"status with merge conflict in .gitmodules">)} 
      {
        (SQ <"\n"> <"\tgit clone . super &&\n"> <"\ttest_create_repo_with_commit sub1 &&\n"> 
          <"\ttest_tick &&\n"> <"\ttest_create_repo_with_commit sub2 &&\n"> <"\t(\n"> <"\t\tcd super &&\n"> 
          <"\t\tprev=$(git rev-parse HEAD) &&\n"> <"\t\tgit checkout -b add_sub1 &&\n"> <"\t\tgit submodule add ../sub1 &&\n"> 
          <"\t\tgit commit -m \"add sub1\" &&\n"> <"\t\tgit checkout -b add_sub2 $prev &&\n"> <"\t\tgit submodule add ../sub2 &&\n"> 
          <"\t\tgit commit -m \"add sub2\" &&\n"> <"\t\tgit checkout -b merge_conflict_gitmodules &&\n"> <"\t\ttest_must_fail git merge add_sub1 &&\n"> 
          <"\t\tgit status -s >../status_actual 2>&1\n"> <"\t) &&\n"> <"\ttest_cmp status_actual status_expect\n">
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:sha1_merge_sub1)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [(C {(cd)} {(sub1)}) (C {(git)} {(rev-parse)} {(HEAD)})]
                        op_id: Op_DAmp
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [521 533]
              )
            }
          spids: [520]
        )
      ]
      spids: [520]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:sha1_merge_sub2)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [(C {(cd)} {(sub2)}) (C {(git)} {(rev-parse)} {(HEAD)})]
                        op_id: Op_DAmp
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [536 548]
              )
            }
          spids: [535]
        )
      ]
      spids: [535]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:short_sha1_merge_sub1)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [(C {(cd)} {(sub1)}) (C {(git)} {(rev-parse)} {(--short)} {(HEAD)})]
                        op_id: Op_DAmp
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [551 565]
              )
            }
          spids: [550]
        )
      ]
      spids: [550]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:short_sha1_merge_sub2)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [(C {(cd)} {(sub2)}) (C {(git)} {(rev-parse)} {(--short)} {(HEAD)})]
                        op_id: Op_DAmp
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [568 582]
              )
            }
          spids: [567]
        )
      ]
      spids: [567]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(diff_expect)} spids:[586])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {("diff --cc .gitmodules\n") ("index badaa4c,44f999a..0000000\n") ("--- a/.gitmodules\n") 
              ("+++ b/.gitmodules\n") ("@@@ -1,3 -1,3 +1,9 @@@\n") ("++<<<<<<< HEAD\n") (" +[submodule \"sub2\"]\n") (" +\tpath = sub2\n") 
              (" +\turl = ../sub2\n") ("++=======\n") ("+ [submodule \"sub1\"]\n") ("+ \tpath = sub1\n") ("+ \turl = ../sub1\n") 
              ("++>>>>>>> add_sub1\n")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [589]
        )
      ]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(diff_submodule_expect)} spids:[596])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {("diff --cc .gitmodules\n") ("index badaa4c,44f999a..0000000\n") ("--- a/.gitmodules\n") 
              ("+++ b/.gitmodules\n") ("@@@ -1,3 -1,3 +1,9 @@@\n") ("++<<<<<<< HEAD\n") (" +[submodule \"sub2\"]\n") (" +\tpath = sub2\n") 
              (" +\turl = ../sub2\n") ("++=======\n") ("+ [submodule \"sub1\"]\n") ("+ \tpath = sub1\n") ("+ \turl = ../sub1\n") 
              ("++>>>>>>> add_sub1\n")
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [599]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"diff with merge conflict in .gitmodules">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd super &&\n"> <"\t\tgit diff >../diff_actual 2>&1\n"> <"\t) &&\n"> 
          <"\ttest_cmp diff_actual diff_expect\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"diff --submodule with merge conflict in .gitmodules">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tcd super &&\n"> 
          <"\t\tgit diff --submodule >../diff_submodule_actual 2>&1\n"> <"\t) &&\n"> <"\ttest_cmp diff_submodule_actual diff_submodule_expect\n">
        )
      }
    )
    (C {(test_done)})
  ]
)