(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: 'Support for diff format verbose submodule difference in git diff\n'
                  span_id: 21
                ) (Token id:Id.Lit_Chars val:'\n' span_id:22) 
                (Token
                  id: Id.Lit_Chars
                  val: 
'This test tries to verify the sanity of --submodule=diff option of git diff.\n'
                  span_id: 23
                )
              )
            }
          spids: [19]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_encoding)
          op: assign_op.Equal
          rhs: {(DQ (ISO8859-1))}
          spids: [35]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:added)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:48)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(printf)} 
                        {(DQ (hinzugef) (Id.Lit_Other '\\') (303) (Id.Lit_Other '\\') (274gt))}
                      )
                    ]
                  )
              )
            }
          spids: [47]
        )
      ]
    )
    (command.ShFunction
      name: add_file
      body: 
        (command.BraceGroup
          children: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                      children: [
                        (C {(cd)} {(DQ ($ Id.VSub_Number '$1'))})
                        (C {(shift)})
                        (command.ForEach
                          iter_name: name
                          do_arg_iter: T
                          body: 
                            (command.DoGroup
                              children: [
                                (command.AndOr
                                  ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                                  children: [
                                    (command.Simple
                                      words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$name'))}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_Great val:'>' span_id:100)
                                          fd: -1
                                          arg_word: {(DQ ($ Id.VSub_DollarName '$name'))}
                                        )
                                      ]
                                    )
                                    (C {(git)} {(add)} {(DQ ($ Id.VSub_DollarName '$name'))})
                                    (C {(test_tick)})
                                    (command.Pipeline
                                      children: [
                                        (C {(echo)} 
                                          {
                                            (DQ ('Add ') ($ Id.VSub_DollarName '$name') (' (') 
                                              ($ Id.VSub_DollarName '$added') (' ') ($ Id.VSub_DollarName '$name') (')')
                                            )
                                          }
                                        )
                                        (C {(iconv)} {(-f)} {(utf-8)} {(-t)} 
                                          {($ Id.VSub_DollarName '$test_encoding')}
                                        )
                                        (C {(git)} {(-c)} 
                                          {
                                            (DQ ('i18n.commitEncoding=') 
                                              ($ Id.VSub_DollarName '$test_encoding')
                                            )
                                          } {(commit)} {(-F)} {(-)}
                                        )
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                              ]
                            )
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:177)
                              fd: -1
                              arg_word: {(/dev/null)}
                            )
                          ]
                        )
                        (C {(git)} {(rev-parse)} {(--short)} {(--verify)} {(HEAD)})
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: commit_file
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(test_tick)})
                (command.Simple
                  words: [
                    {(git)}
                    {(commit)}
                    {(DQ ($ Id.VSub_At '$@'))}
                    {(-m)}
                    {(DQ ('Commit ') ($ Id.VSub_Star '$*'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:227)
                      fd: -1
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup repository' span_id:236))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:240) 
          (Token id:Id.Lit_Chars val:'\ttest_create_repo sm1 &&\n' span_id:241) (Token id:Id.Lit_Chars val:'\tadd_file . foo &&\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\thead1=$(add_file sm1 foo1 foo2) &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\tfullhead1=$(git -C sm1 rev-parse --verify HEAD)\n' span_id:244)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'added submodule' span_id:251))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:255) 
          (Token id:Id.Lit_Chars val:'\tgit add sm1 &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\tgit diff-index -p --submodule=diff HEAD >actual &&\n' span_id:257) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 0000000...$head1 (new submodule)\n' span_id:259) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo1 b/sm1/foo1\n' span_id:260) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:261) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..1715acd\n' span_id:262) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:263) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo1\n' span_id:264) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:265) 
          (Token id:Id.Lit_Chars val:'\t+foo1\n' span_id:266) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo2 b/sm1/foo2\n' span_id:267) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:268) (Token id:Id.Lit_Chars val:'\tindex 0000000..54b060e\n' span_id:269) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:270) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo2\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:272) (Token id:Id.Lit_Chars val:'\t+foo2\n' span_id:273) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:274) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:275)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'added submodule, set diff.submodule' span_id:282))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\ttest_config diff.submodule log &&\n' span_id:287) (Token id:Id.Lit_Chars val:'\tgit add sm1 &&\n' span_id:288) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 289
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:290) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 0000000...$head1 (new submodule)\n'
            span_id: 291
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo1 b/sm1/foo1\n' span_id:292) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:293) (Token id:Id.Lit_Chars val:'\tindex 0000000..1715acd\n' span_id:294) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:295) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo1\n' span_id:296) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:297) (Token id:Id.Lit_Chars val:'\t+foo1\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo2 b/sm1/foo2\n' span_id:299) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..54b060e\n' span_id:301) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo2\n' span_id:303) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:304) 
          (Token id:Id.Lit_Chars val:'\t+foo2\n' span_id:305) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:306) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:307)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--submodule=short overrides diff.submodule' span_id:314))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:318) 
          (Token id:Id.Lit_Chars val:'\ttest_config diff.submodule log &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\tgit add sm1 &&\n' span_id:320) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --submodule=short --cached >actual &&\n'
            span_id: 321
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:322) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1 b/sm1\n' span_id:323) (Token id:Id.Lit_Chars val:'\tnew file mode 160000\n' span_id:324) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..$head1\n' span_id:325) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:326) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1\n' span_id:327) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:328) 
          (Token id:Id.Lit_Chars val:'\t+Subproject commit $fullhead1\n' span_id:329) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:330) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:331)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'diff.submodule does not affect plumbing' span_id:338))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:342) 
          (Token id:Id.Lit_Chars val:'\ttest_config diff.submodule log &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\tgit diff-index -p HEAD >actual &&\n' span_id:344) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1 b/sm1\n' span_id:346) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 160000\n' span_id:347) (Token id:Id.Lit_Chars val:'\tindex 0000000..$head1\n' span_id:348) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:349) (Token id:Id.Lit_Chars val:'\t+++ b/sm1\n' span_id:350) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:351) (Token id:Id.Lit_Chars val:'\t+Subproject commit $fullhead1\n' span_id:352) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:353) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:354)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(commit_file)} {(sm1)})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:head2)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:365)
                    command_list: (command.CommandList children:[(C {(add_file)} {(sm1)} {(foo3)})])
                  )
                }
              spids: [364]
            )
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modified submodule(forward)' span_id:377))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:381) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 382
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:383) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 $head1..$head2:\n' span_id:384) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo3 b/sm1/foo3\n' span_id:385) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:386) (Token id:Id.Lit_Chars val:'\tindex 0000000..c1ec6c6\n' span_id:387) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:388) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo3\n' span_id:389) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:390) (Token id:Id.Lit_Chars val:'\t+foo3\n' span_id:391) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:392) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:393)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modified submodule(forward)' span_id:400))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:404) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --submodule=diff >actual &&\n'
            span_id: 405
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:406) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 $head1..$head2:\n' span_id:407) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo3 b/sm1/foo3\n' span_id:408) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:409) (Token id:Id.Lit_Chars val:'\tindex 0000000..c1ec6c6\n' span_id:410) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:411) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo3\n' span_id:412) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:413) (Token id:Id.Lit_Chars val:'\t+foo3\n' span_id:414) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:415) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:416)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modified submodule(forward) --submodule' span_id:423))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:427) 
          (Token id:Id.Lit_Chars val:'\tgit diff --submodule >actual &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:429) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 $head1..$head2:\n' span_id:430) (Token id:Id.Lit_Chars val:'\t  > Add foo3 ($added foo3)\n' span_id:431) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:432) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:433)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:fullhead2)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:438)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {(cd)} {(sm1)})
                        terminator: (Token id:Id.Op_Semi val:';' span_id:442)
                      )
                      (C {(git)} {(rev-parse)} {(--verify)} {(HEAD)})
                    ]
                  )
              )
            }
          spids: [437]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modified submodule(forward) --submodule=short' span_id:456))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:460) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --submodule=short >actual &&\n'
            span_id: 461
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:462) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1 b/sm1\n' span_id:463) (Token id:Id.Lit_Chars val:'\tindex $head1..$head2 160000\n' span_id:464) 
          (Token id:Id.Lit_Chars val:'\t--- a/sm1\n' span_id:465) (Token id:Id.Lit_Chars val:'\t+++ b/sm1\n' span_id:466) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:467) (Token id:Id.Lit_Chars val:'\t-Subproject commit $fullhead1\n' span_id:468) 
          (Token id:Id.Lit_Chars val:'\t+Subproject commit $fullhead2\n' span_id:469) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:470) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:471)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(commit_file)} {(sm1)})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:head3)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:482)
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.AndOr
                            ops: [Id.Op_DAmp Id.Op_DAmp]
                            children: [
                              (C {(cd)} {(sm1)})
                              (command.Simple
                                words: [{(git)} {(reset)} {(--hard)} {(HEAD) (Id.Lit_TildeLike '~2')}]
                                redirects: [
                                  (redir.Redir
                                    op: (Token id:Id.Redir_Great val:'>' span_id:501)
                                    fd: -1
                                    arg_word: {(/dev/null)}
                                  )
                                ]
                              )
                              (C {(git)} {(rev-parse)} {(--short)} {(--verify)} {(HEAD)})
                            ]
                          )
                        ]
                      )
                  )
                }
              spids: [481]
            )
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modified submodule(backward)' span_id:523))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:527) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 528
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:529) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 $head2..$head3 (rewind):\n'
            span_id: 530
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo2 b/sm1/foo2\n' span_id:531) 
          (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:532) (Token id:Id.Lit_Chars val:'\tindex 54b060e..0000000\n' span_id:533) 
          (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo2\n' span_id:534) (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:535) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:536) (Token id:Id.Lit_Chars val:'\t-foo2\n' span_id:537) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo3 b/sm1/foo3\n' span_id:538) (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:539) 
          (Token id:Id.Lit_Chars val:'\tindex c1ec6c6..0000000\n' span_id:540) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo3\n' span_id:541) 
          (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:542) (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:543) 
          (Token id:Id.Lit_Chars val:'\t-foo3\n' span_id:544) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:545) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:546)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:head4)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:551)
                command_list: 
                  (command.CommandList
                    children: [(C {(add_file)} {(sm1)} {(foo4)} {(foo5)})]
                  )
              )
            }
          spids: [550]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modified submodule(backward and forward)' span_id:564))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:568) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 569
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:570) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 $head2...$head4:\n' span_id:571) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo2 b/sm1/foo2\n' span_id:572) 
          (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:573) (Token id:Id.Lit_Chars val:'\tindex 54b060e..0000000\n' span_id:574) 
          (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo2\n' span_id:575) (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:576) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:577) (Token id:Id.Lit_Chars val:'\t-foo2\n' span_id:578) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo3 b/sm1/foo3\n' span_id:579) (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:580) 
          (Token id:Id.Lit_Chars val:'\tindex c1ec6c6..0000000\n' span_id:581) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo3\n' span_id:582) 
          (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:583) (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:584) 
          (Token id:Id.Lit_Chars val:'\t-foo3\n' span_id:585) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo4 b/sm1/foo4\n' span_id:586) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:587) (Token id:Id.Lit_Chars val:'\tindex 0000000..a0016db\n' span_id:588) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:589) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo4\n' span_id:590) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:591) (Token id:Id.Lit_Chars val:'\t+foo4\n' span_id:592) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo5 b/sm1/foo5\n' span_id:593) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:594) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..d6f2413\n' span_id:595) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:596) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo5\n' span_id:597) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:598) 
          (Token id:Id.Lit_Chars val:'\t+foo5\n' span_id:599) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:600) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:601)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {(commit_file)} {(sm1)})
        (C {(mv)} {(sm1)} {(sm1-bak)})
        (command.Simple
          words: [{(echo)} {(sm1)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:623)
              fd: -1
              arg_word: {(sm1)}
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:head5)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:629)
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Pipeline
                            children: [(C {(git)} {(hash-object)} {(sm1)}) (C {(cut)} {(-c1-7)})]
                            negated: F
                          )
                        ]
                      )
                  )
                }
              spids: [628]
            )
          ]
        )
        (C {(git)} {(add)} {(sm1)})
        (C {(rm)} {(-f)} {(sm1)})
        (C {(mv)} {(sm1-bak)} {(sm1)})
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'typechanged submodule(submodule->blob), --cached'
            span_id: 671
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:675) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --submodule=diff --cached >actual &&\n'
            span_id: 676
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:677) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 $head4...0000000 (submodule deleted)\n'
            span_id: 678
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo1 b/sm1/foo1\n' span_id:679) 
          (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:680) (Token id:Id.Lit_Chars val:'\tindex 1715acd..0000000\n' span_id:681) 
          (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo1\n' span_id:682) (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:683) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:684) (Token id:Id.Lit_Chars val:'\t-foo1\n' span_id:685) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo4 b/sm1/foo4\n' span_id:686) (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:687) 
          (Token id:Id.Lit_Chars val:'\tindex a0016db..0000000\n' span_id:688) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo4\n' span_id:689) 
          (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:690) (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:691) 
          (Token id:Id.Lit_Chars val:'\t-foo4\n' span_id:692) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo5 b/sm1/foo5\n' span_id:693) 
          (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:694) (Token id:Id.Lit_Chars val:'\tindex d6f2413..0000000\n' span_id:695) 
          (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo5\n' span_id:696) (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:697) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:698) (Token id:Id.Lit_Chars val:'\t-foo5\n' span_id:699) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1 b/sm1\n' span_id:700) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:701) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..9da5fb8\n' span_id:702) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:703) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1\n' span_id:704) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:705) 
          (Token id:Id.Lit_Chars val:'\t+sm1\n' span_id:706) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:707) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:708)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'typechanged submodule(submodule->blob)' span_id:715))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:719) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --submodule=diff >actual &&\n'
            span_id: 720
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:721) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1 b/sm1\n' span_id:722) (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:723) 
          (Token id:Id.Lit_Chars val:'\tindex 9da5fb8..0000000\n' span_id:724) (Token id:Id.Lit_Chars val:'\t--- a/sm1\n' span_id:725) 
          (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:726) (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:727) 
          (Token id:Id.Lit_Chars val:'\t-sm1\n' span_id:728) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 0000000...$head4 (new submodule)\n' span_id:729) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo1 b/sm1/foo1\n' span_id:730) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:731) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..1715acd\n' span_id:732) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:733) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo1\n' span_id:734) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:735) 
          (Token id:Id.Lit_Chars val:'\t+foo1\n' span_id:736) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo4 b/sm1/foo4\n' span_id:737) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:738) (Token id:Id.Lit_Chars val:'\tindex 0000000..a0016db\n' span_id:739) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:740) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo4\n' span_id:741) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:742) (Token id:Id.Lit_Chars val:'\t+foo4\n' span_id:743) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo5 b/sm1/foo5\n' span_id:744) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:745) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..d6f2413\n' span_id:746) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:747) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo5\n' span_id:748) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:749) 
          (Token id:Id.Lit_Chars val:'\t+foo5\n' span_id:750) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:751) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:752)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [(C {(rm)} {(-rf)} {(sm1)}) (C {(git)} {(checkout-index)} {(sm1)})]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'typechanged submodule(submodule->blob)' span_id:773))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:777) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 778
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:779) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 $head4...0000000 (submodule deleted)\n'
            span_id: 780
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1 b/sm1\n' span_id:781) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:782) (Token id:Id.Lit_Chars val:'\tindex 0000000..9da5fb8\n' span_id:783) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:784) (Token id:Id.Lit_Chars val:'\t+++ b/sm1\n' span_id:785) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:786) (Token id:Id.Lit_Chars val:'\t+sm1\n' span_id:787) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:788) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:789)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {(rm)} {(-f)} {(sm1)})
        (C {(test_create_repo)} {(sm1)})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:head6)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:808)
                    command_list: 
                      (command.CommandList
                        children: [(C {(add_file)} {(sm1)} {(foo6)} {(foo7)})]
                      )
                  )
                }
              spids: [807]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:fullhead6)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:819)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {(cd)} {(sm1)})
                        terminator: (Token id:Id.Op_Semi val:';' span_id:823)
                      )
                      (C {(git)} {(rev-parse)} {(--verify)} {(HEAD)})
                    ]
                  )
              )
            }
          spids: [818]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'nonexistent commit' span_id:837))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:841) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 842
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:843) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 $head4...$head6 (commits not present)\n'
            span_id: 844
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:845) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:846)
        )
      }
    )
    (C {(commit_file)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'typechanged submodule(blob->submodule)' span_id:855))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:859) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 860
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:861) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1 b/sm1\n' span_id:862) (Token id:Id.Lit_Chars val:'\tdeleted file mode 100644\n' span_id:863) 
          (Token id:Id.Lit_Chars val:'\tindex 9da5fb8..0000000\n' span_id:864) (Token id:Id.Lit_Chars val:'\t--- a/sm1\n' span_id:865) 
          (Token id:Id.Lit_Chars val:'\t+++ /dev/null\n' span_id:866) (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:867) 
          (Token id:Id.Lit_Chars val:'\t-sm1\n' span_id:868) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 0000000...$head6 (new submodule)\n' span_id:869) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:870) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:871) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..462398b\n' span_id:872) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:874) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:875) 
          (Token id:Id.Lit_Chars val:'\t+foo6\n' span_id:876) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo7 b/sm1/foo7\n' span_id:877) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:878) (Token id:Id.Lit_Chars val:'\tindex 0000000..6e9262c\n' span_id:879) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:880) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo7\n' span_id:881) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:882) (Token id:Id.Lit_Chars val:'\t+foo7\n' span_id:883) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:884) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:885)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(commit_file)} {(sm1)})
        (C {(test_expect_success)} 
          {(SQ (Token id:Id.Lit_Chars val:'submodule is up to date' span_id:898))} 
          {
            (SQ (Token id:Id.Lit_Chars val:'\n' span_id:902) 
              (Token
                id: Id.Lit_Chars
                val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
                span_id: 903
              ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:904) 
              (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:905) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:906)
            )
          }
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'submodule contains untracked content' span_id:913))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:917) 
          (Token id:Id.Lit_Chars val:'\techo new > sm1/new-file &&\n' span_id:918) (Token id:Id.Lit_Chars val:'\tgit diff-index -p --submodule=diff HEAD >actual &&\n' span_id:919) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:920) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 contains untracked content\n' span_id:921) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:922) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:923)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'submodule contains untracked content (untracked ignored)'
            span_id: 930
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:934) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&\n'
            span_id: 935
          ) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:936)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'submodule contains untracked content (dirty ignored)'
            span_id: 943
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:947) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&\n'
            span_id: 948
          ) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:949)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'submodule contains untracked content (all ignored)'
            span_id: 956
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:960) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual &&\n'
            span_id: 961
          ) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:962)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'submodule contains untracked and modified content'
            span_id: 969
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:973) 
          (Token id:Id.Lit_Chars val:'\techo new > sm1/foo6 &&\n' span_id:974) (Token id:Id.Lit_Chars val:'\tgit diff-index -p --submodule=diff HEAD >actual &&\n' span_id:975) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:976) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 contains untracked content\n' span_id:977) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 contains modified content\n'
            span_id: 978
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:979) 
          (Token id:Id.Lit_Chars val:'\tindex 462398b..3e75765 100644\n' span_id:980) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:981) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:982) (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:983) 
          (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:984) (Token id:Id.Lit_Chars val:'\t+new\n' span_id:985) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:986) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:987)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'submodule contains untracked and modified content (untracked ignored)'
            span_id: 997
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1001) 
          (Token id:Id.Lit_Chars val:'\techo new > sm1/foo6 &&\n' span_id:1002) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&\n'
            span_id: 1003
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1004) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 contains modified content\n'
            span_id: 1005
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1006) 
          (Token id:Id.Lit_Chars val:'\tindex 462398b..3e75765 100644\n' span_id:1007) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1008) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1009) (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:1010) 
          (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1011) (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1012) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1013) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1014)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'submodule contains untracked and modified content (dirty ignored)'
            span_id: 1021
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1025) 
          (Token id:Id.Lit_Chars val:'\techo new > sm1/foo6 &&\n' span_id:1026) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&\n'
            span_id: 1027
          ) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:1028)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'submodule contains untracked and modified content (all ignored)'
            span_id: 1035
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1039) 
          (Token id:Id.Lit_Chars val:'\techo new > sm1/foo6 &&\n' span_id:1040) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --ignore-submodules --submodule=diff HEAD >actual &&\n'
            span_id: 1041
          ) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:1042)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'submodule contains modified content' span_id:1049))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1053) 
          (Token id:Id.Lit_Chars val:'\trm -f sm1/new-file &&\n' span_id:1054) (Token id:Id.Lit_Chars val:'\tgit diff-index -p --submodule=diff HEAD >actual &&\n' span_id:1055) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1056) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 contains modified content\n' span_id:1057) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1058) (Token id:Id.Lit_Chars val:'\tindex 462398b..3e75765 100644\n' span_id:1059) 
          (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1060) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1061) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:1062) (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1063) 
          (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1064) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1065) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1066)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp]
      children: [
        (command.Subshell
          command_list: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: (C {(cd)} {(sm1)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:1074)
                )
                (command.Simple
                  words: [{(git)} {(commit)} {(-mchange)} {(foo6)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1084)
                      fd: -1
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              ]
            )
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:head8)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1091)
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Sentence
                            child: (C {(cd)} {(sm1)})
                            terminator: (Token id:Id.Op_Semi val:';' span_id:1095)
                          )
                          (C {(git)} {(rev-parse)} {(--short)} {(--verify)} {(HEAD)})
                        ]
                      )
                  )
                }
              spids: [1090]
            )
          ]
        )
        (C {(test_expect_success)} 
          {(SQ (Token id:Id.Lit_Chars val:'submodule is modified' span_id:1113))} 
          {
            (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1117) 
              (Token
                id: Id.Lit_Chars
                val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
                span_id: 1118
              ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1119) 
              (Token
                id: Id.Lit_Chars
                val: '\tSubmodule sm1 17243c9..$head8:\n'
                span_id: 1120
              ) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1121) 
              (Token
                id: Id.Lit_Chars
                val: '\tindex 462398b..3e75765 100644\n'
                span_id: 1122
              ) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1123) 
              (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1124) (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:1125) 
              (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1126) (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1127) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1128) 
              (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1129)
            )
          }
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modified submodule contains untracked content' span_id:1136))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1140) 
          (Token id:Id.Lit_Chars val:'\techo new > sm1/new-file &&\n' span_id:1141) (Token id:Id.Lit_Chars val:'\tgit diff-index -p --submodule=diff HEAD >actual &&\n' span_id:1142) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1143) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 contains untracked content\n' span_id:1144) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 17243c9..$head8:\n' span_id:1145) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1146) 
          (Token id:Id.Lit_Chars val:'\tindex 462398b..3e75765 100644\n' span_id:1147) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1148) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1149) (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:1150) 
          (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1151) (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1152) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1153) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1154)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'modified submodule contains untracked content (untracked ignored)'
            span_id: 1161
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1165) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&\n'
            span_id: 1166
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1167) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 17243c9..$head8:\n' span_id:1168) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1169) 
          (Token id:Id.Lit_Chars val:'\tindex 462398b..3e75765 100644\n' span_id:1170) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1171) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1172) (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:1173) 
          (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1174) (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1175) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1176) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1177)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'modified submodule contains untracked content (dirty ignored)'
            span_id: 1184
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1188) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&\n'
            span_id: 1189
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1190) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 17243c9..cfce562:\n' span_id:1191) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1192) 
          (Token id:Id.Lit_Chars val:'\tindex 462398b..3e75765 100644\n' span_id:1193) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1194) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1195) (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:1196) 
          (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1197) (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1198) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1199) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1200)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'modified submodule contains untracked content (all ignored)'
            span_id: 1207
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1211) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --ignore-submodules=all --submodule=diff HEAD >actual &&\n'
            span_id: 1212
          ) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:1213)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'modified submodule contains untracked and modified content'
            span_id: 1220
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1224) 
          (Token id:Id.Lit_Chars val:'\techo modification >> sm1/foo6 &&\n' span_id:1225) (Token id:Id.Lit_Chars val:'\tgit diff-index -p --submodule=diff HEAD >actual &&\n' span_id:1226) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1227) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 contains untracked content\n' span_id:1228) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 contains modified content\n'
            span_id: 1229
          ) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 17243c9..cfce562:\n' span_id:1230) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1231) (Token id:Id.Lit_Chars val:'\tindex 462398b..dfda541 100644\n' span_id:1232) 
          (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1233) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1234) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +1,2 @@\n' span_id:1235) (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1236) 
          (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1237) (Token id:Id.Lit_Chars val:'\t+modification\n' span_id:1238) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1239) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1240)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'modified submodule contains untracked and modified content (untracked ignored)'
            span_id: 1247
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1251) 
          (Token id:Id.Lit_Chars val:'\techo modification >> sm1/foo6 &&\n' span_id:1252) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&\n'
            span_id: 1253
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1254) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 contains modified content\n'
            span_id: 1255
          ) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 17243c9..cfce562:\n' span_id:1256) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1257) (Token id:Id.Lit_Chars val:'\tindex 462398b..e20e2d9 100644\n' span_id:1258) 
          (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1259) (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1260) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +1,3 @@\n' span_id:1261) (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1262) 
          (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1263) (Token id:Id.Lit_Chars val:'\t+modification\n' span_id:1264) 
          (Token id:Id.Lit_Chars val:'\t+modification\n' span_id:1265) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1266) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1267)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'modified submodule contains untracked and modified content (dirty ignored)'
            span_id: 1274
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1278) 
          (Token id:Id.Lit_Chars val:'\techo modification >> sm1/foo6 &&\n' span_id:1279) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --ignore-submodules=dirty --submodule=diff HEAD >actual &&\n'
            span_id: 1280
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1281) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 17243c9..cfce562:\n' span_id:1282) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1283) 
          (Token id:Id.Lit_Chars val:'\tindex 462398b..3e75765 100644\n' span_id:1284) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1285) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1286) (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:1287) 
          (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1288) (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1289) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1290) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1291)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'modified submodule contains untracked and modified content (all ignored)'
            span_id: 1298
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1302) 
          (Token id:Id.Lit_Chars val:'\techo modification >> sm1/foo6 &&\n' span_id:1303) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --ignore-submodules --submodule=diff HEAD >actual &&\n'
            span_id: 1304
          ) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:1305)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modified submodule contains modified content' span_id:1315))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1319) 
          (Token id:Id.Lit_Chars val:'\trm -f sm1/new-file &&\n' span_id:1320) (Token id:Id.Lit_Chars val:'\tgit diff-index -p --submodule=diff HEAD >actual &&\n' span_id:1321) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1322) (Token id:Id.Lit_Chars val:'\tSubmodule sm1 contains modified content\n' span_id:1323) 
          (Token id:Id.Lit_Chars val:'\tSubmodule sm1 17243c9..cfce562:\n' span_id:1324) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm1/foo6 b/sm1/foo6\n' span_id:1325) 
          (Token id:Id.Lit_Chars val:'\tindex 462398b..ac466ca 100644\n' span_id:1326) (Token id:Id.Lit_Chars val:'\t--- a/sm1/foo6\n' span_id:1327) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm1/foo6\n' span_id:1328) (Token id:Id.Lit_Chars val:'\t@@ -1 +1,5 @@\n' span_id:1329) 
          (Token id:Id.Lit_Chars val:'\t-foo6\n' span_id:1330) (Token id:Id.Lit_Chars val:'\t+new\n' span_id:1331) 
          (Token id:Id.Lit_Chars val:'\t+modification\n' span_id:1332) (Token id:Id.Lit_Chars val:'\t+modification\n' span_id:1333) 
          (Token id:Id.Lit_Chars val:'\t+modification\n' span_id:1334) (Token id:Id.Lit_Chars val:'\t+modification\n' span_id:1335) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1336) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1337)
        )
      }
    )
    (C {(rm)} {(-rf)} {(sm1)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'deleted submodule' span_id:1350))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1354) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 1355
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1356) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 17243c9...0000000 (submodule deleted)\n'
            span_id: 1357
          ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1358) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1359)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {(test_create_repo)} {(sm2)})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:head7)
              op: assign_op.Equal
              rhs: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1370)
                    command_list: 
                      (command.CommandList
                        children: [(C {(add_file)} {(sm2)} {(foo8)} {(foo9)})]
                      )
                  )
                }
              spids: [1369]
            )
          ]
        )
        (C {(git)} {(add)} {(sm2)})
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'multiple submodules' span_id:1392))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1396) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD >actual &&\n'
            span_id: 1397
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1398) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 17243c9...0000000 (submodule deleted)\n'
            span_id: 1399
          ) (Token id:Id.Lit_Chars val:'\tSubmodule sm2 0000000...a5a65c9 (new submodule)\n' span_id:1400) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm2/foo8 b/sm2/foo8\n' span_id:1401) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:1402) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..db9916b\n' span_id:1403) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:1404) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm2/foo8\n' span_id:1405) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:1406) 
          (Token id:Id.Lit_Chars val:'\t+foo8\n' span_id:1407) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm2/foo9 b/sm2/foo9\n' span_id:1408) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:1409) (Token id:Id.Lit_Chars val:'\tindex 0000000..9c3b4f6\n' span_id:1410) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:1411) (Token id:Id.Lit_Chars val:'\t+++ b/sm2/foo9\n' span_id:1412) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:1413) (Token id:Id.Lit_Chars val:'\t+foo9\n' span_id:1414) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1415) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1416)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'path filter' span_id:1423))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1427) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD sm2 >actual &&\n'
            span_id: 1428
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1429) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm2 0000000...a5a65c9 (new submodule)\n'
            span_id: 1430
          ) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm2/foo8 b/sm2/foo8\n' span_id:1431) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:1432) (Token id:Id.Lit_Chars val:'\tindex 0000000..db9916b\n' span_id:1433) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:1434) (Token id:Id.Lit_Chars val:'\t+++ b/sm2/foo8\n' span_id:1435) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:1436) (Token id:Id.Lit_Chars val:'\t+foo8\n' span_id:1437) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm2/foo9 b/sm2/foo9\n' span_id:1438) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:1439) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..9c3b4f6\n' span_id:1440) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:1441) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm2/foo9\n' span_id:1442) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:1443) 
          (Token id:Id.Lit_Chars val:'\t+foo9\n' span_id:1444) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1445) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1446)
        )
      }
    )
    (C {(commit_file)} {(sm2)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'given commit' span_id:1457))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1461) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index -p --submodule=diff HEAD^ >actual &&\n'
            span_id: 1462
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1463) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 17243c9...0000000 (submodule deleted)\n'
            span_id: 1464
          ) (Token id:Id.Lit_Chars val:'\tSubmodule sm2 0000000...a5a65c9 (new submodule)\n' span_id:1465) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm2/foo8 b/sm2/foo8\n' span_id:1466) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:1467) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..db9916b\n' span_id:1468) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:1469) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm2/foo8\n' span_id:1470) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:1471) 
          (Token id:Id.Lit_Chars val:'\t+foo8\n' span_id:1472) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm2/foo9 b/sm2/foo9\n' span_id:1473) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:1474) (Token id:Id.Lit_Chars val:'\tindex 0000000..9c3b4f6\n' span_id:1475) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:1476) (Token id:Id.Lit_Chars val:'\t+++ b/sm2/foo9\n' span_id:1477) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:1478) (Token id:Id.Lit_Chars val:'\t+foo9\n' span_id:1479) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1480) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1481)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup .git file for sm2' span_id:1488))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1492) 
          (Token id:Id.Lit_Chars val:'\t(cd sm2 &&\n' span_id:1493) (Token id:Id.Lit_Chars val:'\t REAL="$(pwd)/../.real" &&\n' span_id:1494) 
          (Token id:Id.Lit_Chars val:'\t mv .git "$REAL"\n' span_id:1495) (Token id:Id.Lit_Chars val:'\t echo "gitdir: $REAL" >.git)\n' span_id:1496)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'diff --submodule=diff with .git file' span_id:1503))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1507) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --submodule=diff HEAD^ >actual &&\n'
            span_id: 1508
          ) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:1509) 
          (Token
            id: Id.Lit_Chars
            val: '\tSubmodule sm1 17243c9...0000000 (submodule deleted)\n'
            span_id: 1510
          ) (Token id:Id.Lit_Chars val:'\tSubmodule sm2 0000000...a5a65c9 (new submodule)\n' span_id:1511) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/sm2/foo8 b/sm2/foo8\n' span_id:1512) (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:1513) 
          (Token id:Id.Lit_Chars val:'\tindex 0000000..db9916b\n' span_id:1514) (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:1515) 
          (Token id:Id.Lit_Chars val:'\t+++ b/sm2/foo8\n' span_id:1516) (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:1517) 
          (Token id:Id.Lit_Chars val:'\t+foo8\n' span_id:1518) (Token id:Id.Lit_Chars val:'\tdiff --git a/sm2/foo9 b/sm2/foo9\n' span_id:1519) 
          (Token id:Id.Lit_Chars val:'\tnew file mode 100644\n' span_id:1520) (Token id:Id.Lit_Chars val:'\tindex 0000000..9c3b4f6\n' span_id:1521) 
          (Token id:Id.Lit_Chars val:'\t--- /dev/null\n' span_id:1522) (Token id:Id.Lit_Chars val:'\t+++ b/sm2/foo9\n' span_id:1523) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:1524) (Token id:Id.Lit_Chars val:'\t+foo9\n' span_id:1525) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1526) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1527)
        )
      }
    )
    (C {(test_done)})
  ]
)