(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)}) ] )