(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 submodules config cache infrastructure\n'
                  span_id: 15
                ) (Token id:Id.Lit_Chars val:'\n' span_id:16) 
                (Token
                  id: Id.Lit_Chars
                  val: 'This test verifies that parsing .gitmodules configurations directly\n'
                  span_id: 17
                ) (Token id:Id.Lit_Chars val:'from the database and from the worktree works.\n' span_id:18)
              )
            }
          spids: [13]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEST_NO_CREATE_REPO)
          op: assign_op.Equal
          rhs: {(1)}
          spids: [22]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'submodule config cache setup' span_id:33))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\tmkdir submodule &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\t(cd submodule &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\t\techo a >a &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\t\tgit add . &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\t\tgit commit -ma\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tmkdir super &&\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\t\tgit submodule add ../submodule &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\t\tgit submodule add ../submodule a &&\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "add as submodule and as a" &&\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\t\tgit mv a b &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "move a to b"\n' span_id:52) (Token id:Id.Lit_Chars val:'\t)\n' span_id:53)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:59)
          fd: -1
          arg_word: {(super/expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:62)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 70
          stdin_parts: [
            ("Submodule name: 'a' for path 'a'\n")
            ("Submodule name: 'a' for path 'b'\n")
            ("Submodule name: 'submodule' for path 'submodule'\n")
            ("Submodule name: 'submodule' for path 'submodule'\n")
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'test parsing and lookup of submodule config by path'
            span_id: 75
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\t\ttest-submodule-config \\\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\t\t\tHEAD^ a \\\n' span_id:82) (Token id:Id.Lit_Chars val:'\t\t\tHEAD b \\\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t\t\tHEAD^ submodule \\\n' span_id:84) (Token id:Id.Lit_Chars val:'\t\t\tHEAD submodule \\\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\t\t\t\t>actual &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:88)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'test parsing and lookup of submodule config by name'
            span_id: 95
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:99) 
          (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\t\ttest-submodule-config --name \\\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\t\t\tHEAD^ a \\\n' span_id:102) (Token id:Id.Lit_Chars val:'\t\t\tHEAD a \\\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\t\t\tHEAD^ submodule \\\n' span_id:104) (Token id:Id.Lit_Chars val:'\t\t\tHEAD submodule \\\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\t\t\t\t>actual &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:108)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:114)
          fd: -1
          arg_word: {(super/expect_error)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:117)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 123
          stdin_parts: [
            ("Submodule name: 'a' for path 'b'\n")
            ("Submodule name: 'submodule' for path 'submodule'\n")
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'error in one submodule config lets continue' span_id:128))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\t\tcp .gitmodules .gitmodules.bak &&\n' span_id:134) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "\tvalue = \\"" >>.gitmodules &&\n'
            span_id: 135
          ) (Token id:Id.Lit_Chars val:'\t\tgit add .gitmodules &&\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\t\tmv .gitmodules.bak .gitmodules &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "add error" &&\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\t\ttest-submodule-config \\\n' span_id:139) (Token id:Id.Lit_Chars val:'\t\t\tHEAD b \\\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\t\t\tHEAD submodule \\\n' span_id:141) (Token id:Id.Lit_Chars val:'\t\t\t\t>actual &&\n' span_id:142) 
          (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_error actual\n' span_id:143) (Token id:Id.Lit_Chars val:'\t)\n' span_id:144)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'error message contains blob reference' span_id:151))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\t\tsha1=$(git rev-parse HEAD) &&\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\t\ttest-submodule-config \\\n' span_id:158) (Token id:Id.Lit_Chars val:'\t\t\tHEAD b \\\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\t\t\tHEAD submodule \\\n' span_id:160) (Token id:Id.Lit_Chars val:'\t\t\t\t2>actual_err &&\n' span_id:161) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_i18ngrep "submodule-blob $sha1:.gitmodules" actual_err >/dev/null\n'
            span_id: 162
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:163)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:169)
          fd: -1
          arg_word: {(super/expect_url)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:172)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 178
          stdin_parts: [
            ("Submodule url: 'git@somewhere.else.net:a.git' for path 'b'\n")
            ("Submodule url: 'git@somewhere.else.net:submodule.git' for path 'submodule'\n")
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:182)
          fd: -1
          arg_word: {(super/expect_local_path)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:185)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 191
          stdin_parts: [
            ("Submodule name: 'a' for path 'c'\n")
            ("Submodule name: 'submodule' for path 'submodule'\n")
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'reading of local configuration' span_id:196))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:200) 
          (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\t\told_a=$(git config submodule.a.url) &&\n' span_id:202) 
          (Token
            id: Id.Lit_Chars
            val: '\t\told_submodule=$(git config submodule.submodule.url) &&\n'
            span_id: 203
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config submodule.a.url git@somewhere.else.net:a.git &&\n'
            span_id: 204
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config submodule.submodule.url git@somewhere.else.net:submodule.git &&\n'
            span_id: 205
          ) (Token id:Id.Lit_Chars val:'\t\ttest-submodule-config --url \\\n' span_id:206) 
          (Token id:Id.Lit_Chars val:'\t\t\t"" b \\\n' span_id:207) (Token id:Id.Lit_Chars val:'\t\t\t"" submodule \\\n' span_id:208) 
          (Token id:Id.Lit_Chars val:'\t\t\t\t>actual &&\n' span_id:209) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_url actual &&\n' span_id:210) 
          (Token id:Id.Lit_Chars val:'\t\tgit config submodule.a.path c &&\n' span_id:211) (Token id:Id.Lit_Chars val:'\t\ttest-submodule-config \\\n' span_id:212) 
          (Token id:Id.Lit_Chars val:'\t\t\t"" c \\\n' span_id:213) (Token id:Id.Lit_Chars val:'\t\t\t"" submodule \\\n' span_id:214) 
          (Token id:Id.Lit_Chars val:'\t\t\t\t>actual &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_local_path actual &&\n' span_id:216) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config submodule.a.url $old_a &&\n'
            span_id: 217
          ) (Token id:Id.Lit_Chars val:'\t\tgit config submodule.submodule.url $old_submodule &&\n' span_id:218) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config --unset submodule.a.path c\n'
            span_id: 219
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:220)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:226)
          fd: -1
          arg_word: {(super/expect_fetchrecurse_die.err)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:229)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 234
          stdin_parts: [('fatal: bad submodule.submodule.fetchrecursesubmodules argument: blabla\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'local error in fetchrecursesubmodule dies early' span_id:239))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:244) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config submodule.submodule.fetchrecursesubmodules blabla &&\n'
            span_id: 245
          ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail test-submodule-config \\\n' span_id:246) 
          (Token id:Id.Lit_Chars val:'\t\t\t"" b \\\n' span_id:247) (Token id:Id.Lit_Chars val:'\t\t\t"" submodule \\\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\t\t\t\t>actual.out 2>actual.err &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\t\ttouch expect_fetchrecurse_die.out &&\n' span_id:250) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_cmp expect_fetchrecurse_die.out actual.out  &&\n'
            span_id: 251
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_fetchrecurse_die.err actual.err  &&\n' span_id:252) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config --unset submodule.submodule.fetchrecursesubmodules\n'
            span_id: 253
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:254)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'error in history in fetchrecursesubmodule lets continue'
            span_id: 261
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) 
          (Token id:Id.Lit_Chars val:'\t(cd super &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\t\tgit config -f .gitmodules \\\n' span_id:267) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tsubmodule.submodule.fetchrecursesubmodules blabla &&\n'
            span_id: 268
          ) (Token id:Id.Lit_Chars val:'\t\tgit add .gitmodules &&\n' span_id:269) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config --unset -f .gitmodules \\\n'
            span_id: 270
          ) (Token id:Id.Lit_Chars val:'\t\t\tsubmodule.submodule.fetchrecursesubmodules &&\n' span_id:271) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "add error in fetchrecursesubmodules" &&\n'
            span_id: 272
          ) (Token id:Id.Lit_Chars val:'\t\ttest-submodule-config \\\n' span_id:273) 
          (Token id:Id.Lit_Chars val:'\t\t\tHEAD b \\\n' span_id:274) (Token id:Id.Lit_Chars val:'\t\t\tHEAD submodule \\\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'\t\t\t\t>actual &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_error actual  &&\n' span_id:277) 
          (Token id:Id.Lit_Chars val:'\t\tgit reset --hard HEAD^\n' span_id:278) (Token id:Id.Lit_Chars val:'\t)\n' span_id:279)
        )
      }
    )
    (C {(test_done)})
  ]
)