(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:'Basic porcelain support for submodules\n' span_id:15) (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id: Id.Lit_Chars val: 'This test tries to verify basic sanity of the init, update and status\n' span_id: 17 ) (Token id:Id.Lit_Chars val:'subcommands of git submodule.\n' span_id:18) ) } spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule deinit works on empty repository' span_id:30))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit submodule deinit --all\n' span_id:35) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup - initial commit' span_id:42))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:46) (Token id:Id.Lit_Chars val:'\t>t &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\tgit add t &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\tgit commit -m "initial commit" &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit branch initial\n' span_id:50) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule init aborts on missing .gitmodules file' span_id: 57 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:61) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git update-index --remove sub" &&\n' span_id: 62 ) (Token id: Id.Lit_Chars val: '\tgit update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub &&\n' span_id: 63 ) (Token id:Id.Lit_Chars val:'\t# missing the .gitmodules file here\n' span_id:64) (Token id: Id.Lit_Chars val: '\ttest_must_fail git submodule init 2>actual &&\n' span_id: 65 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "No url found for submodule path" actual\n' span_id:66) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule update aborts on missing .gitmodules file' span_id: 73 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:77) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git update-index --remove sub" &&\n' span_id: 78 ) (Token id: Id.Lit_Chars val: '\tgit update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub &&\n' span_id: 79 ) (Token id:Id.Lit_Chars val:'\t# missing the .gitmodules file here\n' span_id:80) (Token id:Id.Lit_Chars val:'\tgit submodule update sub 2>actual &&\n' span_id:81) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Submodule path .sub. not initialized" actual\n' span_id: 82 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'configuration parsing' span_id:89))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f .gitmodules" &&\n' span_id: 94 ) (Token id:Id.Lit_Chars val:'\tcat >.gitmodules <<-\\EOF &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\t[submodule "s"]\n' span_id:96) (Token id:Id.Lit_Chars val:'\t\tpath\n' span_id:97) (Token id:Id.Lit_Chars val:'\t\tignore\n' span_id:98) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:99) (Token id:Id.Lit_Chars val:'\ttest_must_fail git status\n' span_id:100) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup - repository in init subdirectory' span_id:107))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id:Id.Lit_Chars val:'\tmkdir init &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\t(\n' span_id:113) (Token id:Id.Lit_Chars val:'\t\tcd init &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\t\techo a >a &&\n' span_id:116) (Token id:Id.Lit_Chars val:'\t\tgit add a &&\n' span_id:117) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "submodule commit 1" &&\n' span_id: 118 ) (Token id:Id.Lit_Chars val:'\t\tgit tag -a -m "rev-1" rev-1\n' span_id:119) (Token id:Id.Lit_Chars val:'\t)\n' span_id:120) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup - commit with gitlink' span_id:127))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:131) (Token id:Id.Lit_Chars val:'\techo a >a &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\techo z >z &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\tgit add a init z &&\n' span_id:134) (Token id:Id.Lit_Chars val:'\tgit commit -m "super commit 1"\n' span_id:135) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup - hide init subdirectory' span_id:142))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) (Token id:Id.Lit_Chars val:'\tmv init .subrepo\n' span_id:147) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup - repository to add submodules to' span_id:154))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:158) (Token id:Id.Lit_Chars val:'\tgit init addtest &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\tgit init addtest-ignore\n' span_id:160) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:submodurl) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:177) command_list: (command.CommandList children:[(C {(pwd)} {(-P)})]) ) } spids: [176] ) ] ) (command.ShFunction name: listbranches body: (command.BraceGroup children: [ (C {(git)} {(for-each-ref)} {(--format) (Id.Lit_Equals '=') (SQ (Token id:Id.Lit_Chars val:'%(refname)' span_id:198))} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*' span_id:202))} ) ] ) ) (command.ShFunction name: inspect body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dir) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [215] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dotdot) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Number val:2 span_id:224) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(..)}) ) ) } spids: [221] ) ] ) (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(cd)} {(DQ ($ Id.VSub_DollarName '$dir'))}) (command.Simple words: [{(listbranches)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:248) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$dotdot') (/heads))} ) ] ) (command.BraceGroup children: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(git)} {(symbolic-ref)} {(HEAD)}) (C {(Id.Lit_Other ':')}) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:268) ) ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:272) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$dotdot') (/head))} ) ] ) (command.Simple words: [{(git)} {(rev-parse)} {(HEAD)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:287) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$dotdot') (/head-sha1))} ) ] ) (C {(git)} {(update-index)} {(--refresh)}) (C {(git)} {(diff-files)} {(--exit-code)}) (command.Simple words: [{(git)} {(clean)} {(-n)} {(-d)} {(-x)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:324) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$dotdot') (/untracked))} ) ] ) ] ) ] ) ) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add' span_id:339))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:343) (Token id:Id.Lit_Chars val:'\techo "refs/heads/master" >expect &&\n' span_id:344) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\n' span_id:346) (Token id:Id.Lit_Chars val:'\t(\n' span_id:347) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:348) (Token id: Id.Lit_Chars val: '\t\tgit submodule add -q "$submodurl" submod >actual &&\n' span_id: 349 ) (Token id:Id.Lit_Chars val:'\t\ttest_must_be_empty actual &&\n' span_id:350) (Token id: Id.Lit_Chars val: '\t\techo "gitdir: ../.git/modules/submod" >expect &&\n' span_id: 351 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect submod/.git &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:353) (Token id:Id.Lit_Chars val:'\t\t\tcd submod &&\n' span_id:354) (Token id: Id.Lit_Chars val: '\t\t\tgit config core.worktree >actual &&\n' span_id: 355 ) (Token id:Id.Lit_Chars val:'\t\t\techo "../../../submod" >expect &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp expect actual &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\t\t\trm -f actual expect\n' span_id:358) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:360) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:361) (Token id:Id.Lit_Chars val:'\n' span_id:362) (Token id:Id.Lit_Chars val:'\trm -f heads head untracked &&\n' span_id:363) (Token id:Id.Lit_Chars val:'\tinspect addtest/submod ../.. &&\n' span_id:364) (Token id:Id.Lit_Chars val:'\ttest_cmp expect heads &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\ttest_cmp empty untracked\n' span_id:367) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add to .gitignored path fails' span_id:374))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:378) (Token id:Id.Lit_Chars val:'\t(\n' span_id:379) (Token id:Id.Lit_Chars val:'\t\tcd addtest-ignore &&\n' span_id:380) (Token id:Id.Lit_Chars val:'\t\tcat <<-\\EOF >expect &&\n' span_id:381) (Token id: Id.Lit_Chars val: '\t\tThe following path is ignored by one of your .gitignore files:\n' span_id: 382 ) (Token id:Id.Lit_Chars val:'\t\tsubmod\n' span_id:383) (Token id: Id.Lit_Chars val: '\t\tUse -f if you really want to add it.\n' span_id: 384 ) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:385) (Token id: Id.Lit_Chars val: '\t\t# Does not use test_commit due to the ignore\n' span_id: 386 ) (Token id:Id.Lit_Chars val:'\t\techo "*" > .gitignore &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\t\tgit add --force .gitignore &&\n' span_id:388) (Token id:Id.Lit_Chars val:'\t\tgit commit -m"Ignore everything" &&\n' span_id:389) (Token id: Id.Lit_Chars val: '\t\t! git submodule add "$submodurl" submod >actual 2>&1 &&\n' span_id: 390 ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ncmp expect actual\n' span_id:391) (Token id:Id.Lit_Chars val:'\t)\n' span_id:392) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add to .gitignored path with --force' span_id:399))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:403) (Token id:Id.Lit_Chars val:'\t(\n' span_id:404) (Token id:Id.Lit_Chars val:'\t\tcd addtest-ignore &&\n' span_id:405) (Token id: Id.Lit_Chars val: '\t\tgit submodule add --force "$submodurl" submod\n' span_id: 406 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:407) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add --branch' span_id:414))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:418) (Token id: Id.Lit_Chars val: '\techo "refs/heads/initial" >expect-head &&\n' span_id: 419 ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expect-heads &&\n' span_id:420) (Token id:Id.Lit_Chars val:'\trefs/heads/initial\n' span_id:421) (Token id:Id.Lit_Chars val:'\trefs/heads/master\n' span_id:422) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:423) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:424) (Token id:Id.Lit_Chars val:'\n' span_id:425) (Token id:Id.Lit_Chars val:'\t(\n' span_id:426) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:427) (Token id: Id.Lit_Chars val: '\t\tgit submodule add -b initial "$submodurl" submod-branch &&\n' span_id: 428 ) (Token id: Id.Lit_Chars val: '\t\ttest "initial" = "$(git config -f .gitmodules submodule.submod-branch.branch)" &&\n' span_id: 429 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:430) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:431) (Token id:Id.Lit_Chars val:'\n' span_id:432) (Token id:Id.Lit_Chars val:'\trm -f heads head untracked &&\n' span_id:433) (Token id:Id.Lit_Chars val:'\tinspect addtest/submod-branch ../.. &&\n' span_id:434) (Token id:Id.Lit_Chars val:'\ttest_cmp expect-heads heads &&\n' span_id:435) (Token id:Id.Lit_Chars val:'\ttest_cmp expect-head head &&\n' span_id:436) (Token id:Id.Lit_Chars val:'\ttest_cmp empty untracked\n' span_id:437) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add with ./ in path' span_id:444))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:448) (Token id:Id.Lit_Chars val:'\techo "refs/heads/master" >expect &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\n' span_id:451) (Token id:Id.Lit_Chars val:'\t(\n' span_id:452) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:453) (Token id: Id.Lit_Chars val: '\t\tgit submodule add "$submodurl" ././dotsubmod/./frotz/./ &&\n' span_id: 454 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:455) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:456) (Token id:Id.Lit_Chars val:'\n' span_id:457) (Token id:Id.Lit_Chars val:'\trm -f heads head untracked &&\n' span_id:458) (Token id:Id.Lit_Chars val:'\tinspect addtest/dotsubmod/frotz ../../.. &&\n' span_id:459) (Token id:Id.Lit_Chars val:'\ttest_cmp expect heads &&\n' span_id:460) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head &&\n' span_id:461) (Token id:Id.Lit_Chars val:'\ttest_cmp empty untracked\n' span_id:462) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add with /././ in path' span_id:469))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:473) (Token id:Id.Lit_Chars val:'\techo "refs/heads/master" >expect &&\n' span_id:474) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\n' span_id:476) (Token id:Id.Lit_Chars val:'\t(\n' span_id:477) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:478) (Token id: Id.Lit_Chars val: '\t\tgit submodule add "$submodurl" dotslashdotsubmod/././frotz/./ &&\n' span_id: 479 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:480) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:481) (Token id:Id.Lit_Chars val:'\n' span_id:482) (Token id:Id.Lit_Chars val:'\trm -f heads head untracked &&\n' span_id:483) (Token id:Id.Lit_Chars val:'\tinspect addtest/dotslashdotsubmod/frotz ../../.. &&\n' span_id:484) (Token id:Id.Lit_Chars val:'\ttest_cmp expect heads &&\n' span_id:485) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\ttest_cmp empty untracked\n' span_id:487) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add with // in path' span_id:494))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:498) (Token id:Id.Lit_Chars val:'\techo "refs/heads/master" >expect &&\n' span_id:499) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:500) (Token id:Id.Lit_Chars val:'\n' span_id:501) (Token id:Id.Lit_Chars val:'\t(\n' span_id:502) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:503) (Token id: Id.Lit_Chars val: '\t\tgit submodule add "$submodurl" slashslashsubmod///frotz// &&\n' span_id: 504 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:505) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:506) (Token id:Id.Lit_Chars val:'\n' span_id:507) (Token id:Id.Lit_Chars val:'\trm -f heads head untracked &&\n' span_id:508) (Token id:Id.Lit_Chars val:'\tinspect addtest/slashslashsubmod/frotz ../../.. &&\n' span_id:509) (Token id:Id.Lit_Chars val:'\ttest_cmp expect heads &&\n' span_id:510) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head &&\n' span_id:511) (Token id:Id.Lit_Chars val:'\ttest_cmp empty untracked\n' span_id:512) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add with /.. in path' span_id:519))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:523) (Token id:Id.Lit_Chars val:'\techo "refs/heads/master" >expect &&\n' span_id:524) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:525) (Token id:Id.Lit_Chars val:'\n' span_id:526) (Token id:Id.Lit_Chars val:'\t(\n' span_id:527) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:528) (Token id: Id.Lit_Chars val: '\t\tgit submodule add "$submodurl" dotdotsubmod/../realsubmod/frotz/.. &&\n' span_id: 529 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:530) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\n' span_id:532) (Token id:Id.Lit_Chars val:'\trm -f heads head untracked &&\n' span_id:533) (Token id:Id.Lit_Chars val:'\tinspect addtest/realsubmod ../.. &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\ttest_cmp expect heads &&\n' span_id:535) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head &&\n' span_id:536) (Token id:Id.Lit_Chars val:'\ttest_cmp empty untracked\n' span_id:537) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add with ./, /.. and // in path' span_id:544))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:548) (Token id:Id.Lit_Chars val:'\techo "refs/heads/master" >expect &&\n' span_id:549) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\n' span_id:551) (Token id:Id.Lit_Chars val:'\t(\n' span_id:552) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:553) (Token id: Id.Lit_Chars val: '\t\tgit submodule add "$submodurl" dot/dotslashsubmod/./../..////realsubmod2/a/b/c/d/../../../../frotz//.. &&\n' span_id: 554 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:555) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:556) (Token id:Id.Lit_Chars val:'\n' span_id:557) (Token id:Id.Lit_Chars val:'\trm -f heads head untracked &&\n' span_id:558) (Token id:Id.Lit_Chars val:'\tinspect addtest/realsubmod2 ../.. &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\ttest_cmp expect heads &&\n' span_id:560) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head &&\n' span_id:561) (Token id:Id.Lit_Chars val:'\ttest_cmp empty untracked\n' span_id:562) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add in subdirectory' span_id:569))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:573) (Token id:Id.Lit_Chars val:'\techo "refs/heads/master" >expect &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:575) (Token id:Id.Lit_Chars val:'\n' span_id:576) (Token id:Id.Lit_Chars val:'\tmkdir addtest/sub &&\n' span_id:577) (Token id:Id.Lit_Chars val:'\t(\n' span_id:578) (Token id:Id.Lit_Chars val:'\t\tcd addtest/sub &&\n' span_id:579) (Token id:Id.Lit_Chars val:'\t\tgit submodule add "$submodurl" ../realsubmod3 &&\n' span_id:580) (Token id:Id.Lit_Chars val:'\t\tgit submodule init\n' span_id:581) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:582) (Token id:Id.Lit_Chars val:'\n' span_id:583) (Token id:Id.Lit_Chars val:'\trm -f heads head untracked &&\n' span_id:584) (Token id:Id.Lit_Chars val:'\tinspect addtest/realsubmod3 ../.. &&\n' span_id:585) (Token id:Id.Lit_Chars val:'\ttest_cmp expect heads &&\n' span_id:586) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head &&\n' span_id:587) (Token id:Id.Lit_Chars val:'\ttest_cmp empty untracked\n' span_id:588) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule add in subdirectory with relative path should fail' span_id: 595 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:599) (Token id:Id.Lit_Chars val:'\t(\n' span_id:600) (Token id:Id.Lit_Chars val:'\t\tcd addtest/sub &&\n' span_id:601) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git submodule add ../../ submod3 2>../../output.err\n' span_id: 602 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:603) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep toplevel output.err\n' span_id:604) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup - add an example entry to .gitmodules' span_id:611))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:615) (Token id: Id.Lit_Chars val: '\tgit config --file=.gitmodules submodule.example.url git://example.com/init.git\n' span_id: 616 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status should fail for unmapped paths' span_id:623))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:627) (Token id:Id.Lit_Chars val:'\ttest_must_fail git submodule status\n' span_id:628) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup - map path in .gitmodules' span_id:635))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:639) (Token id:Id.Lit_Chars val:'\tcat <<\\EOF >expect &&\n' span_id:640) (Token id:Id.Lit_Chars val:'[submodule "example"]\n' span_id:641) (Token id:Id.Lit_Chars val:'\turl = git://example.com/init.git\n' span_id:642) (Token id:Id.Lit_Chars val:'\tpath = init\n' span_id:643) (Token id:Id.Lit_Chars val:'EOF\n' span_id:644) (Token id:Id.Lit_Chars val:'\n' span_id:645) (Token id: Id.Lit_Chars val: '\tgit config --file=.gitmodules submodule.example.path init &&\n' span_id: 646 ) (Token id:Id.Lit_Chars val:'\n' span_id:647) (Token id:Id.Lit_Chars val:'\ttest_cmp expect .gitmodules\n' span_id:648) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status should only print one line' span_id:655))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:659) (Token id:Id.Lit_Chars val:'\tgit submodule status >lines &&\n' span_id:660) (Token id:Id.Lit_Chars val:'\ttest_line_count = 1 lines\n' span_id:661) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup - fetch commit name from submodule' span_id:668))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:672) (Token id: Id.Lit_Chars val: '\trev1=$(cd .subrepo && git rev-parse HEAD) &&\n' span_id: 673 ) (Token id:Id.Lit_Chars val:'\tprintf "rev1: %s\\n" "$rev1" &&\n' span_id:674) (Token id:Id.Lit_Chars val:'\ttest -n "$rev1"\n' span_id:675) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status should initially be "missing"' span_id:682))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:686) (Token id:Id.Lit_Chars val:'\tgit submodule status >lines &&\n' span_id:687) (Token id:Id.Lit_Chars val:'\tgrep "^-$rev1" lines\n' span_id:688) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'init should register submodule url in .git/config' span_id: 695 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:699) (Token id: Id.Lit_Chars val: '\techo git://example.com/init.git >expect &&\n' span_id: 700 ) (Token id:Id.Lit_Chars val:'\n' span_id:701) (Token id:Id.Lit_Chars val:'\tgit submodule init &&\n' span_id:702) (Token id:Id.Lit_Chars val:'\tgit config submodule.example.url >url &&\n' span_id:703) (Token id: Id.Lit_Chars val: '\tgit config submodule.example.url ./.subrepo &&\n' span_id: 704 ) (Token id:Id.Lit_Chars val:'\n' span_id:705) (Token id:Id.Lit_Chars val:'\ttest_cmp expect url\n' span_id:706) ) } ) (command.ShFunction name: test_failure_with_unknown_submodule body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(test_must_fail)} {(git)} {(submodule)} {($ Id.VSub_Number '$1')} {(no-such-submodule)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:728) fd: 2 arg_word: {(output.err)} ) ] ) (C {(grep)} {(DQ ('^error: .*no-such-submodule'))} {(output.err)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'init should fail with unknown submodule' span_id:748))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:752) (Token id: Id.Lit_Chars val: '\ttest_failure_with_unknown_submodule init\n' span_id: 753 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'update should fail with unknown submodule' span_id:760))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:764) (Token id: Id.Lit_Chars val: '\ttest_failure_with_unknown_submodule update\n' span_id: 765 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status should fail with unknown submodule' span_id:772))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:776) (Token id: Id.Lit_Chars val: '\ttest_failure_with_unknown_submodule status\n' span_id: 777 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'sync should fail with unknown submodule' span_id:784))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:788) (Token id: Id.Lit_Chars val: '\ttest_failure_with_unknown_submodule sync\n' span_id: 789 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'update should fail when path is used by a file' span_id:796))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:800) (Token id:Id.Lit_Chars val:'\techo hello >expect &&\n' span_id:801) (Token id:Id.Lit_Chars val:'\n' span_id:802) (Token id:Id.Lit_Chars val:'\techo "hello" >init &&\n' span_id:803) (Token id:Id.Lit_Chars val:'\ttest_must_fail git submodule update &&\n' span_id:804) (Token id:Id.Lit_Chars val:'\n' span_id:805) (Token id:Id.Lit_Chars val:'\ttest_cmp expect init\n' span_id:806) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'update should fail when path is used by a nonempty directory' span_id: 813 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:817) (Token id:Id.Lit_Chars val:'\techo hello >expect &&\n' span_id:818) (Token id:Id.Lit_Chars val:'\n' span_id:819) (Token id:Id.Lit_Chars val:'\trm -fr init &&\n' span_id:820) (Token id:Id.Lit_Chars val:'\tmkdir init &&\n' span_id:821) (Token id:Id.Lit_Chars val:'\techo "hello" >init/a &&\n' span_id:822) (Token id:Id.Lit_Chars val:'\n' span_id:823) (Token id: Id.Lit_Chars val: '\ttest_must_fail git submodule update &&\n' span_id: 824 ) (Token id:Id.Lit_Chars val:'\n' span_id:825) (Token id:Id.Lit_Chars val:'\ttest_cmp expect init/a\n' span_id:826) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'update should work when path is an empty dir' span_id:833))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:837) (Token id:Id.Lit_Chars val:'\trm -fr init &&\n' span_id:838) (Token id:Id.Lit_Chars val:'\trm -f head-sha1 &&\n' span_id:839) (Token id:Id.Lit_Chars val:'\techo "$rev1" >expect &&\n' span_id:840) (Token id:Id.Lit_Chars val:'\n' span_id:841) (Token id:Id.Lit_Chars val:'\tmkdir init &&\n' span_id:842) (Token id:Id.Lit_Chars val:'\tgit submodule update -q >update.out &&\n' span_id:843) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty update.out &&\n' span_id:844) (Token id:Id.Lit_Chars val:'\n' span_id:845) (Token id:Id.Lit_Chars val:'\tinspect init &&\n' span_id:846) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head-sha1\n' span_id:847) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status should be "up-to-date" after update' span_id:854))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:858) (Token id:Id.Lit_Chars val:'\tgit submodule status >list &&\n' span_id:859) (Token id:Id.Lit_Chars val:'\tgrep "^ $rev1" list\n' span_id:860) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status "up-to-date" from subdirectory' span_id:867))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:871) (Token id:Id.Lit_Chars val:'\tmkdir -p sub &&\n' span_id:872) (Token id:Id.Lit_Chars val:'\t(\n' span_id:873) (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:874) (Token id:Id.Lit_Chars val:'\t\tgit submodule status >../list\n' span_id:875) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:876) (Token id:Id.Lit_Chars val:'\tgrep "^ $rev1" list &&\n' span_id:877) (Token id:Id.Lit_Chars val:'\tgrep "\\\\.\\\\./init" list\n' span_id:878) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status "up-to-date" from subdirectory with path' span_id:885))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:889) (Token id:Id.Lit_Chars val:'\tmkdir -p sub &&\n' span_id:890) (Token id:Id.Lit_Chars val:'\t(\n' span_id:891) (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:892) (Token id:Id.Lit_Chars val:'\t\tgit submodule status ../init >../list\n' span_id:893) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:894) (Token id:Id.Lit_Chars val:'\tgrep "^ $rev1" list &&\n' span_id:895) (Token id:Id.Lit_Chars val:'\tgrep "\\\\.\\\\./init" list\n' span_id:896) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'status should be "modified" after submodule commit' span_id: 903 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:907) (Token id:Id.Lit_Chars val:'\t(\n' span_id:908) (Token id:Id.Lit_Chars val:'\t\tcd init &&\n' span_id:909) (Token id:Id.Lit_Chars val:'\t\techo b >b &&\n' span_id:910) (Token id:Id.Lit_Chars val:'\t\tgit add b &&\n' span_id:911) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "submodule commit 2"\n' span_id: 912 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:913) (Token id:Id.Lit_Chars val:'\n' span_id:914) (Token id: Id.Lit_Chars val: '\trev2=$(cd init && git rev-parse HEAD) &&\n' span_id: 915 ) (Token id:Id.Lit_Chars val:'\ttest -n "$rev2" &&\n' span_id:916) (Token id:Id.Lit_Chars val:'\tgit submodule status >list &&\n' span_id:917) (Token id:Id.Lit_Chars val:'\n' span_id:918) (Token id:Id.Lit_Chars val:'\tgrep "^+$rev2" list\n' span_id:919) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'the --cached sha1 should be rev1' span_id:926))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:930) (Token id: Id.Lit_Chars val: '\tgit submodule --cached status >list &&\n' span_id: 931 ) (Token id:Id.Lit_Chars val:'\tgrep "^+$rev1" list\n' span_id:932) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'git diff should report the SHA1 of the new submodule commit' span_id: 939 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:943) (Token id:Id.Lit_Chars val:'\tgit diff >diff &&\n' span_id:944) (Token id:Id.Lit_Chars val:'\tgrep "^+Subproject commit $rev2" diff\n' span_id:945) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'update should checkout rev1' span_id:952))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:956) (Token id:Id.Lit_Chars val:'\trm -f head-sha1 &&\n' span_id:957) (Token id:Id.Lit_Chars val:'\techo "$rev1" >expect &&\n' span_id:958) (Token id:Id.Lit_Chars val:'\n' span_id:959) (Token id:Id.Lit_Chars val:'\tgit submodule update init &&\n' span_id:960) (Token id:Id.Lit_Chars val:'\tinspect init &&\n' span_id:961) (Token id:Id.Lit_Chars val:'\n' span_id:962) (Token id:Id.Lit_Chars val:'\ttest_cmp expect head-sha1\n' span_id:963) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'status should be "up-to-date" after update' span_id:970))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:974) (Token id:Id.Lit_Chars val:'\tgit submodule status >list &&\n' span_id:975) (Token id:Id.Lit_Chars val:'\tgrep "^ $rev1" list\n' span_id:976) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout superproject with subproject already present' span_id: 983 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:987) (Token id:Id.Lit_Chars val:'\tgit checkout initial &&\n' span_id:988) (Token id:Id.Lit_Chars val:'\tgit checkout master\n' span_id:989) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'apply submodule diff' span_id:996))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1000) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:1001) (Token id:Id.Lit_Chars val:'\n' span_id:1002) (Token id:Id.Lit_Chars val:'\tgit branch second &&\n' span_id:1003) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1004) (Token id:Id.Lit_Chars val:'\t\tcd init &&\n' span_id:1005) (Token id:Id.Lit_Chars val:'\t\techo s >s &&\n' span_id:1006) (Token id:Id.Lit_Chars val:'\t\tgit add s &&\n' span_id:1007) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "change subproject"\n' span_id:1008) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1009) (Token id:Id.Lit_Chars val:'\tgit update-index --add init &&\n' span_id:1010) (Token id:Id.Lit_Chars val:'\tgit commit -m "change init" &&\n' span_id:1011) (Token id:Id.Lit_Chars val:'\tgit format-patch -1 --stdout >P.diff &&\n' span_id:1012) (Token id:Id.Lit_Chars val:'\tgit checkout second &&\n' span_id:1013) (Token id:Id.Lit_Chars val:'\tgit apply --index P.diff &&\n' span_id:1014) (Token id:Id.Lit_Chars val:'\n' span_id:1015) (Token id:Id.Lit_Chars val:'\tgit diff --cached master >staged &&\n' span_id:1016) (Token id:Id.Lit_Chars val:'\ttest_cmp empty staged\n' span_id:1017) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'update --init' span_id:1024))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1028) (Token id:Id.Lit_Chars val:'\tmv init init2 &&\n' span_id:1029) (Token id: Id.Lit_Chars val: '\tgit config -f .gitmodules submodule.example.url "$(pwd)/init2" &&\n' span_id: 1030 ) (Token id:Id.Lit_Chars val:'\tgit config --remove-section submodule.example &&\n' span_id:1031) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config submodule.example.url &&\n' span_id: 1032 ) (Token id:Id.Lit_Chars val:'\n' span_id:1033) (Token id: Id.Lit_Chars val: '\tgit submodule update init 2> update.out &&\n' span_id: 1034 ) (Token id:Id.Lit_Chars val:'\tcat update.out &&\n' span_id:1035) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "not initialized" update.out &&\n' span_id: 1036 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --resolve-git-dir init/.git &&\n' span_id: 1037 ) (Token id:Id.Lit_Chars val:'\n' span_id:1038) (Token id: Id.Lit_Chars val: '\tgit submodule update --init init &&\n' span_id: 1039 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --resolve-git-dir init/.git\n' span_id:1040) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'update --init from subdirectory' span_id:1047))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1051) (Token id:Id.Lit_Chars val:'\tmv init init2 &&\n' span_id:1052) (Token id: Id.Lit_Chars val: '\tgit config -f .gitmodules submodule.example.url "$(pwd)/init2" &&\n' span_id: 1053 ) (Token id:Id.Lit_Chars val:'\tgit config --remove-section submodule.example &&\n' span_id:1054) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config submodule.example.url &&\n' span_id: 1055 ) (Token id:Id.Lit_Chars val:'\n' span_id:1056) (Token id:Id.Lit_Chars val:'\tmkdir -p sub &&\n' span_id:1057) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1058) (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:1059) (Token id:Id.Lit_Chars val:'\t\tgit submodule update ../init 2>update.out &&\n' span_id:1060) (Token id:Id.Lit_Chars val:'\t\tcat update.out &&\n' span_id:1061) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "not initialized" update.out &&\n' span_id:1062) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git rev-parse --resolve-git-dir ../init/.git &&\n' span_id: 1063 ) (Token id:Id.Lit_Chars val:'\n' span_id:1064) (Token id: Id.Lit_Chars val: '\t\tgit submodule update --init ../init\n' span_id: 1065 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1066) (Token id: Id.Lit_Chars val: '\tgit rev-parse --resolve-git-dir init/.git\n' span_id: 1067 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not add files from a submodule' span_id:1074))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1078) (Token id:Id.Lit_Chars val:'\n' span_id:1079) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1080) (Token id:Id.Lit_Chars val:'\ttest_must_fail git add init/a\n' span_id:1081) (Token id:Id.Lit_Chars val:'\n' span_id:1082) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'gracefully add/reset submodule with a trailing slash' span_id: 1089 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1093) (Token id:Id.Lit_Chars val:'\n' span_id:1094) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1095) (Token id: Id.Lit_Chars val: '\tgit commit -m "commit subproject" init &&\n' span_id: 1096 ) (Token id:Id.Lit_Chars val:'\t(cd init &&\n' span_id:1097) (Token id:Id.Lit_Chars val:'\t echo b > a) &&\n' span_id:1098) (Token id:Id.Lit_Chars val:'\tgit add init/ &&\n' span_id:1099) (Token id: Id.Lit_Chars val: '\tgit diff --exit-code --cached init &&\n' span_id: 1100 ) (Token id:Id.Lit_Chars val:'\tcommit=$(cd init &&\n' span_id:1101) (Token id: Id.Lit_Chars val: '\t git commit -m update a >/dev/null &&\n' span_id: 1102 ) (Token id:Id.Lit_Chars val:'\t git rev-parse HEAD) &&\n' span_id:1103) (Token id:Id.Lit_Chars val:'\tgit add init/ &&\n' span_id:1104) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --exit-code --cached init &&\n' span_id:1105) (Token id: Id.Lit_Chars val: '\ttest $commit = $(git ls-files --stage |\n' span_id: 1106 ) (Token id:Id.Lit_Chars val:'\t\tsed -n "s/^160000 \\([^ ]*\\).*/\\1/p") &&\n' span_id:1107) (Token id:Id.Lit_Chars val:'\tgit reset init/ &&\n' span_id:1108) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code --cached init\n' span_id:1109) (Token id:Id.Lit_Chars val:'\n' span_id:1110) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ls-files gracefully handles trailing slash' span_id:1117))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1121) (Token id:Id.Lit_Chars val:'\n' span_id:1122) (Token id:Id.Lit_Chars val:'\ttest "init" = "$(git ls-files init/)"\n' span_id:1123) (Token id:Id.Lit_Chars val:'\n' span_id:1124) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'moving to a commit without submodule does not leave empty dir' span_id: 1131 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1135) (Token id:Id.Lit_Chars val:'\trm -rf init &&\n' span_id:1136) (Token id:Id.Lit_Chars val:'\tmkdir init &&\n' span_id:1137) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1138) (Token id:Id.Lit_Chars val:'\tgit checkout initial &&\n' span_id:1139) (Token id:Id.Lit_Chars val:'\ttest ! -d init &&\n' span_id:1140) (Token id:Id.Lit_Chars val:'\tgit checkout second\n' span_id:1141) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule <invalid-subcommand> fails' span_id:1148))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1152) (Token id: Id.Lit_Chars val: '\ttest_must_fail git submodule no-such-subcommand\n' span_id: 1153 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'add submodules without specifying an explicit path' span_id: 1160 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1164) (Token id:Id.Lit_Chars val:'\tmkdir repo &&\n' span_id:1165) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1166) (Token id:Id.Lit_Chars val:'\t\tcd repo &&\n' span_id:1167) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1168) (Token id:Id.Lit_Chars val:'\t\techo r >r &&\n' span_id:1169) (Token id:Id.Lit_Chars val:'\t\tgit add r &&\n' span_id:1170) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "repo commit 1"\n' span_id:1171) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1172) (Token id:Id.Lit_Chars val:'\tgit clone --bare repo/ bare.git &&\n' span_id:1173) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1174) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:1175) (Token id:Id.Lit_Chars val:'\t\tgit submodule add "$submodurl/repo" &&\n' span_id:1176) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule.repo.path repo &&\n' span_id: 1177 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule add "$submodurl/bare.git" &&\n' span_id:1178) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule.bare.path bare\n' span_id: 1179 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1180) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add should fail when path is used by a file' span_id:1187))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1191) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1192) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:1193) (Token id:Id.Lit_Chars val:'\t\ttouch file &&\n' span_id:1194) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail\tgit submodule add "$submodurl/repo" file\n' span_id: 1195 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1196) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'add should fail when path is used by an existing directory' span_id: 1203 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1207) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1208) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:1209) (Token id:Id.Lit_Chars val:'\t\tmkdir empty-dir &&\n' span_id:1210) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git submodule add "$submodurl/repo" empty-dir\n' span_id: 1211 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1212) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'use superproject as upstream when path is relative and no url is set there' span_id: 1219 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1223) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1224) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:1225) (Token id: Id.Lit_Chars val: '\t\tgit submodule add ../repo relative &&\n' span_id: 1226 ) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config -f .gitmodules submodule.relative.url)" = ../repo &&\n' span_id: 1227 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule sync relative &&\n' span_id:1228) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.relative.url)" = "$submodurl/repo"\n' span_id: 1229 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1230) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up for relative path tests' span_id:1237))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1241) (Token id:Id.Lit_Chars val:'\tmkdir reltest &&\n' span_id:1242) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1243) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1244) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1245) (Token id:Id.Lit_Chars val:'\t\tmkdir sub &&\n' span_id:1246) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1247) (Token id:Id.Lit_Chars val:'\t\t\tcd sub &&\n' span_id:1248) (Token id:Id.Lit_Chars val:'\t\t\tgit init &&\n' span_id:1249) (Token id:Id.Lit_Chars val:'\t\t\ttest_commit foo\n' span_id:1250) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:1251) (Token id:Id.Lit_Chars val:'\t\tgit add sub &&\n' span_id:1252) (Token id:Id.Lit_Chars val:'\t\tgit config -f .gitmodules submodule.sub.path sub &&\n' span_id:1253) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule.sub.url ../subrepo &&\n' span_id: 1254 ) (Token id:Id.Lit_Chars val:'\t\tcp .git/config pristine-.git-config &&\n' span_id:1255) (Token id: Id.Lit_Chars val: '\t\tcp .gitmodules pristine-.gitmodules\n' span_id: 1256 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1257) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with URL - ssh://hostname/repo' span_id: 1264 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1268) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1269) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1270) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1271 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1272) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url ssh://hostname/repo &&\n' span_id: 1273 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1274) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = ssh://hostname/subrepo\n' span_id: 1275 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1276) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with port-qualified URL - ssh://hostname:22/repo' span_id: 1283 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1287) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1288) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1289) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1290 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1291) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url ssh://hostname:22/repo &&\n' span_id: 1292 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1293) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = ssh://hostname:22/subrepo\n' span_id: 1294 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1295) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo path works with local path - //somewhere else/repo' span_id: 1317 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1321) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1322) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1323) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1324 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1325) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url "//somewhere else/repo" &&\n' span_id: 1326 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1327) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = "//somewhere else/subrepo"\n' span_id: 1328 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1329) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with file URL - file:///tmp/repo' span_id: 1336 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1340) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1341) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1342) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1343 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1344) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url file:///tmp/repo &&\n' span_id: 1345 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1346) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = file:///tmp/subrepo\n' span_id: 1347 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1348) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with helper URL- helper:://hostname/repo' span_id: 1355 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1359) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1360) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1361) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1362 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1363) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url helper:://hostname/repo &&\n' span_id: 1364 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1365) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = helper:://hostname/subrepo\n' span_id: 1366 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1367) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with scp-style URL - user@host:repo' span_id: 1374 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1378) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1379) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1380) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1381 ) (Token id:Id.Lit_Chars val:'\t\tgit config remote.origin.url user@host:repo &&\n' span_id:1382) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1383) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = user@host:subrepo\n' span_id: 1384 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1385) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with scp-style URL - user@host:path/to/repo' span_id: 1392 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1396) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1397) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1398) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1399 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1400) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url user@host:path/to/repo &&\n' span_id: 1401 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1402) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = user@host:path/to/subrepo\n' span_id: 1403 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1404) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with relative local path - foo' span_id: 1411 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1415) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1416) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1417) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1418 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1419) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url foo &&\n' span_id: 1420 ) (Token id:Id.Lit_Chars val:'\t\t# actual: fails with an error\n' span_id:1421) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1422) (Token id:Id.Lit_Chars val:'\t\ttest "$(git config submodule.sub.url)" = subrepo\n' span_id:1423) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1424) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with relative local path - foo/bar' span_id: 1431 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1435) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1436) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1437) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1438 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1439) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url foo/bar &&\n' span_id: 1440 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1441) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = foo/subrepo\n' span_id: 1442 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1443) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with relative local path - ./foo' span_id: 1450 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1454) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1455) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1456) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1457 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1458) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url ./foo &&\n' span_id: 1459 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1460) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = subrepo\n' span_id: 1461 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1462) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with relative local path - ./foo/bar' span_id: 1469 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1473) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1474) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1475) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1476 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1477) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url ./foo/bar &&\n' span_id: 1478 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1479) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = foo/subrepo\n' span_id: 1480 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1481) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with relative local path - ../foo' span_id: 1488 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1492) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1493) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1494) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1495 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1496) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url ../foo &&\n' span_id: 1497 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1498) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = ../subrepo\n' span_id: 1499 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1500) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../subrepo works with relative local path - ../foo/bar' span_id: 1507 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1511) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1512) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1513) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1514 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1515) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url ../foo/bar &&\n' span_id: 1516 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1517) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.sub.url)" = ../foo/subrepo\n' span_id: 1518 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1519) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '../bar/a/b/c works with relative local path - ../foo/bar.git' span_id: 1526 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1530) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1531) (Token id:Id.Lit_Chars val:'\t\tcd reltest &&\n' span_id:1532) (Token id: Id.Lit_Chars val: '\t\tcp pristine-.git-config .git/config &&\n' span_id: 1533 ) (Token id:Id.Lit_Chars val:'\t\tcp pristine-.gitmodules .gitmodules &&\n' span_id:1534) (Token id:Id.Lit_Chars val:'\t\tmkdir -p a/b/c &&\n' span_id:1535) (Token id:Id.Lit_Chars val:'\t\t(cd a/b/c; git init) &&\n' span_id:1536) (Token id: Id.Lit_Chars val: '\t\tgit config remote.origin.url ../foo/bar.git &&\n' span_id: 1537 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule add ../bar/a/b/c ./a/b/c &&\n' span_id:1538) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1539) (Token id: Id.Lit_Chars val: '\t\ttest "$(git config submodule.a/b/c.url)" = ../foo/bar/a/b/c\n' span_id: 1540 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1541) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'moving the superproject does not break submodules' span_id: 1548 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1552) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1553) (Token id:Id.Lit_Chars val:'\t\tcd addtest &&\n' span_id:1554) (Token id:Id.Lit_Chars val:'\t\tgit submodule status >expect\n' span_id:1555) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1556) (Token id:Id.Lit_Chars val:'\tmv addtest addtest2 &&\n' span_id:1557) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1558) (Token id:Id.Lit_Chars val:'\t\tcd addtest2 &&\n' span_id:1559) (Token id:Id.Lit_Chars val:'\t\tgit submodule status >actual &&\n' span_id:1560) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:1561) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1562) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule add --name allows to replace a submodule with another at the same path' span_id: 1569 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1573) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1574) (Token id:Id.Lit_Chars val:'\t\tcd addtest2 &&\n' span_id:1575) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1576) (Token id:Id.Lit_Chars val:'\t\t\tcd repo &&\n' span_id:1577) (Token id: Id.Lit_Chars val: '\t\t\techo "$submodurl/repo" >expect &&\n' span_id: 1578 ) (Token id:Id.Lit_Chars val:'\t\t\tgit config remote.origin.url >actual &&\n' span_id:1579) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp expect actual &&\n' span_id:1580) (Token id:Id.Lit_Chars val:'\t\t\techo "gitdir: ../.git/modules/repo" >expect &&\n' span_id:1581) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp expect .git\n' span_id:1582) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:1583) (Token id:Id.Lit_Chars val:'\t\trm -rf repo &&\n' span_id:1584) (Token id:Id.Lit_Chars val:'\t\tgit rm repo &&\n' span_id:1585) (Token id: Id.Lit_Chars val: '\t\tgit submodule add -q --name repo_new "$submodurl/bare.git" repo >actual &&\n' span_id: 1586 ) (Token id:Id.Lit_Chars val:'\t\ttest_must_be_empty actual &&\n' span_id:1587) (Token id: Id.Lit_Chars val: '\t\techo "gitdir: ../.git/modules/submod" >expect &&\n' span_id: 1588 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect submod/.git &&\n' span_id:1589) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1590) (Token id:Id.Lit_Chars val:'\t\t\tcd repo &&\n' span_id:1591) (Token id: Id.Lit_Chars val: '\t\t\techo "$submodurl/bare.git" >expect &&\n' span_id: 1592 ) (Token id:Id.Lit_Chars val:'\t\t\tgit config remote.origin.url >actual &&\n' span_id:1593) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp expect actual &&\n' span_id:1594) (Token id:Id.Lit_Chars val:'\t\t\techo "gitdir: ../.git/modules/repo_new" >expect &&\n' span_id:1595) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp expect .git\n' span_id:1596) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:1597) (Token id:Id.Lit_Chars val:'\t\techo "repo" >expect &&\n' span_id:1598) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git config -f .gitmodules submodule.repo.path &&\n' span_id: 1599 ) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule.repo_new.path >actual &&\n' span_id: 1600 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual&&\n' span_id:1601) (Token id: Id.Lit_Chars val: '\t\techo "$submodurl/repo" >expect &&\n' span_id: 1602 ) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git config -f .gitmodules submodule.repo.url &&\n' span_id: 1603 ) (Token id:Id.Lit_Chars val:'\t\techo "$submodurl/bare.git" >expect &&\n' span_id:1604) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule.repo_new.url >actual &&\n' span_id: 1605 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:1606) (Token id: Id.Lit_Chars val: '\t\techo "$submodurl/repo" >expect &&\n' span_id: 1607 ) (Token id:Id.Lit_Chars val:'\t\tgit config submodule.repo.url >actual &&\n' span_id:1608) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:1609) (Token id:Id.Lit_Chars val:'\t\techo "$submodurl/bare.git" >expect &&\n' span_id:1610) (Token id: Id.Lit_Chars val: '\t\tgit config submodule.repo_new.url >actual &&\n' span_id: 1611 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:1612) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1613) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'recursive relative submodules stay relative' span_id:1620))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1624) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -rf super clone2 subsub sub3" &&\n' span_id: 1625 ) (Token id:Id.Lit_Chars val:'\tmkdir subsub &&\n' span_id:1626) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1627) (Token id:Id.Lit_Chars val:'\t\tcd subsub &&\n' span_id:1628) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1629) (Token id:Id.Lit_Chars val:'\t\t>t &&\n' span_id:1630) (Token id:Id.Lit_Chars val:'\t\tgit add t &&\n' span_id:1631) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "initial commit"\n' span_id:1632) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1633) (Token id:Id.Lit_Chars val:'\tmkdir sub3 &&\n' span_id:1634) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1635) (Token id:Id.Lit_Chars val:'\t\tcd sub3 &&\n' span_id:1636) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1637) (Token id:Id.Lit_Chars val:'\t\t>t &&\n' span_id:1638) (Token id:Id.Lit_Chars val:'\t\tgit add t &&\n' span_id:1639) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "initial commit" &&\n' span_id:1640) (Token id: Id.Lit_Chars val: '\t\tgit submodule add ../subsub dirdir/subsub &&\n' span_id: 1641 ) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "add submodule subsub"\n' span_id:1642) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1643) (Token id:Id.Lit_Chars val:'\tmkdir super &&\n' span_id:1644) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1645) (Token id:Id.Lit_Chars val:'\t\tcd super &&\n' span_id:1646) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1647) (Token id:Id.Lit_Chars val:'\t\t>t &&\n' span_id:1648) (Token id:Id.Lit_Chars val:'\t\tgit add t &&\n' span_id:1649) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "initial commit" &&\n' span_id:1650) (Token id:Id.Lit_Chars val:'\t\tgit submodule add ../sub3 &&\n' span_id:1651) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "add submodule sub"\n' span_id:1652) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1653) (Token id:Id.Lit_Chars val:'\tgit clone super clone2 &&\n' span_id:1654) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1655) (Token id:Id.Lit_Chars val:'\t\tcd clone2 &&\n' span_id:1656) (Token id: Id.Lit_Chars val: '\t\tgit submodule update --init --recursive &&\n' span_id: 1657 ) (Token id: Id.Lit_Chars val: '\t\techo "gitdir: ../.git/modules/sub3" >./sub3/.git_expect &&\n' span_id: 1658 ) (Token id: Id.Lit_Chars val: '\t\techo "gitdir: ../../../.git/modules/sub3/modules/dirdir/subsub" >./sub3/dirdir/subsub/.git_expect\n' span_id: 1659 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1660) (Token id: Id.Lit_Chars val: '\ttest_cmp clone2/sub3/.git_expect clone2/sub3/.git &&\n' span_id: 1661 ) (Token id: Id.Lit_Chars val: '\ttest_cmp clone2/sub3/dirdir/subsub/.git_expect clone2/sub3/dirdir/subsub/.git\n' span_id: 1662 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule add with an existing name fails unless forced' span_id: 1669 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1673) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1674) (Token id:Id.Lit_Chars val:'\t\tcd addtest2 &&\n' span_id:1675) (Token id:Id.Lit_Chars val:'\t\trm -rf repo &&\n' span_id:1676) (Token id:Id.Lit_Chars val:'\t\tgit rm repo &&\n' span_id:1677) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git submodule add -q --name repo_new "$submodurl/repo.git" repo &&\n' span_id: 1678 ) (Token id:Id.Lit_Chars val:'\t\ttest ! -d repo &&\n' span_id:1679) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git config -f .gitmodules submodule.repo_new.path &&\n' span_id: 1680 ) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git config -f .gitmodules submodule.repo_new.url &&\n' span_id: 1681 ) (Token id:Id.Lit_Chars val:'\t\techo "$submodurl/bare.git" >expect &&\n' span_id:1682) (Token id: Id.Lit_Chars val: '\t\tgit config submodule.repo_new.url >actual &&\n' span_id: 1683 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:1684) (Token id: Id.Lit_Chars val: '\t\tgit submodule add -f -q --name repo_new "$submodurl/repo.git" repo &&\n' span_id: 1685 ) (Token id:Id.Lit_Chars val:'\t\ttest -d repo &&\n' span_id:1686) (Token id:Id.Lit_Chars val:'\t\techo "repo" >expect &&\n' span_id:1687) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule.repo_new.path >actual &&\n' span_id: 1688 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual&&\n' span_id:1689) (Token id: Id.Lit_Chars val: '\t\techo "$submodurl/repo.git" >expect &&\n' span_id: 1690 ) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule.repo_new.url >actual &&\n' span_id: 1691 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:1692) (Token id: Id.Lit_Chars val: '\t\techo "$submodurl/repo.git" >expect &&\n' span_id: 1693 ) (Token id:Id.Lit_Chars val:'\t\tgit config submodule.repo_new.url >actual &&\n' span_id:1694) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:1695) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1696) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up a second submodule' span_id:1703))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1707) (Token id: Id.Lit_Chars val: '\tgit submodule add ./init2 example2 &&\n' span_id: 1708 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "submodule example2 added"\n' span_id:1709) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit works on repository without submodules' span_id: 1716 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1720) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -rf newdirectory" &&\n' span_id: 1721 ) (Token id:Id.Lit_Chars val:'\tmkdir newdirectory &&\n' span_id:1722) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1723) (Token id:Id.Lit_Chars val:'\t\tcd newdirectory &&\n' span_id:1724) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1725) (Token id:Id.Lit_Chars val:'\t\t>file &&\n' span_id:1726) (Token id:Id.Lit_Chars val:'\t\tgit add file &&\n' span_id:1727) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "repo should not be empty" &&\n' span_id:1728) (Token id:Id.Lit_Chars val:'\t\tgit submodule deinit . &&\n' span_id:1729) (Token id:Id.Lit_Chars val:'\t\tgit submodule deinit --all\n' span_id:1730) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1731) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit should remove the whole submodule section from .git/config' span_id: 1738 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1742) (Token id: Id.Lit_Chars val: '\tgit config submodule.example.foo bar &&\n' span_id: 1743 ) (Token id:Id.Lit_Chars val:'\tgit config submodule.example2.frotz nitfol &&\n' span_id:1744) (Token id:Id.Lit_Chars val:'\tgit submodule deinit init &&\n' span_id:1745) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1746 ) (Token id: Id.Lit_Chars val: '\ttest -n "$(git config --get-regexp "submodule\\.example2\\.")" &&\n' span_id: 1747 ) (Token id:Id.Lit_Chars val:'\ttest -f example2/.git &&\n' span_id:1748) (Token id:Id.Lit_Chars val:'\trmdir init\n' span_id:1749) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule deinit from subdirectory' span_id:1756))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1760) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1761) (Token id:Id.Lit_Chars val:'\tgit config submodule.example.foo bar &&\n' span_id:1762) (Token id:Id.Lit_Chars val:'\tmkdir -p sub &&\n' span_id:1763) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1764) (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:1765) (Token id:Id.Lit_Chars val:'\t\tgit submodule deinit ../init >../output\n' span_id:1766) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1767) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "\\\\.\\\\./init" output &&\n' span_id:1768) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1769 ) (Token id: Id.Lit_Chars val: '\ttest -n "$(git config --get-regexp "submodule\\.example2\\.")" &&\n' span_id: 1770 ) (Token id:Id.Lit_Chars val:'\ttest -f example2/.git &&\n' span_id:1771) (Token id:Id.Lit_Chars val:'\trmdir init\n' span_id:1772) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit . deinits all initialized submodules' span_id: 1779 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1783) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1784) (Token id:Id.Lit_Chars val:'\tgit config submodule.example.foo bar &&\n' span_id:1785) (Token id: Id.Lit_Chars val: '\tgit config submodule.example2.frotz nitfol &&\n' span_id: 1786 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git submodule deinit &&\n' span_id:1787) (Token id:Id.Lit_Chars val:'\tgit submodule deinit . >actual &&\n' span_id:1788) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1789 ) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example2\\.")" &&\n' span_id: 1790 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1791) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Cleared directory .example2" actual &&\n' span_id: 1792 ) (Token id:Id.Lit_Chars val:'\trmdir init example2\n' span_id:1793) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit --all deinits all initialized submodules' span_id: 1800 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1804) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1805) (Token id:Id.Lit_Chars val:'\tgit config submodule.example.foo bar &&\n' span_id:1806) (Token id: Id.Lit_Chars val: '\tgit config submodule.example2.frotz nitfol &&\n' span_id: 1807 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git submodule deinit &&\n' span_id:1808) (Token id: Id.Lit_Chars val: '\tgit submodule deinit --all >actual &&\n' span_id: 1809 ) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1810 ) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example2\\.")" &&\n' span_id: 1811 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1812) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Cleared directory .example2" actual &&\n' span_id: 1813 ) (Token id:Id.Lit_Chars val:'\trmdir init example2\n' span_id:1814) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit deinits a submodule when its work tree is missing or empty' span_id: 1821 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1825) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1826) (Token id:Id.Lit_Chars val:'\trm -rf init example2/* example2/.git &&\n' span_id:1827) (Token id: Id.Lit_Chars val: '\tgit submodule deinit init example2 >actual &&\n' span_id: 1828 ) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1829 ) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example2\\.")" &&\n' span_id: 1830 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep ! "Cleared directory .init" actual &&\n' span_id:1831) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Cleared directory .example2" actual &&\n' span_id: 1832 ) (Token id:Id.Lit_Chars val:'\trmdir init\n' span_id:1833) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit fails when the submodule contains modifications unless forced' span_id: 1840 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1844) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1845) (Token id:Id.Lit_Chars val:'\techo X >>init/s &&\n' span_id:1846) (Token id: Id.Lit_Chars val: '\ttest_must_fail git submodule deinit init &&\n' span_id: 1847 ) (Token id: Id.Lit_Chars val: '\ttest -n "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1848 ) (Token id:Id.Lit_Chars val:'\ttest -f example2/.git &&\n' span_id:1849) (Token id: Id.Lit_Chars val: '\tgit submodule deinit -f init >actual &&\n' span_id: 1850 ) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1851 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1852) (Token id:Id.Lit_Chars val:'\trmdir init\n' span_id:1853) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit fails when the submodule contains untracked files unless forced' span_id: 1860 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1864) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1865) (Token id:Id.Lit_Chars val:'\techo X >>init/untracked &&\n' span_id:1866) (Token id: Id.Lit_Chars val: '\ttest_must_fail git submodule deinit init &&\n' span_id: 1867 ) (Token id: Id.Lit_Chars val: '\ttest -n "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1868 ) (Token id:Id.Lit_Chars val:'\ttest -f example2/.git &&\n' span_id:1869) (Token id: Id.Lit_Chars val: '\tgit submodule deinit -f init >actual &&\n' span_id: 1870 ) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1871 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1872) (Token id:Id.Lit_Chars val:'\trmdir init\n' span_id:1873) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit fails when the submodule HEAD does not match unless forced' span_id: 1880 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1884) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1885) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1886) (Token id:Id.Lit_Chars val:'\t\tcd init &&\n' span_id:1887) (Token id:Id.Lit_Chars val:'\t\tgit checkout HEAD^\n' span_id:1888) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1889) (Token id:Id.Lit_Chars val:'\ttest_must_fail git submodule deinit init &&\n' span_id:1890) (Token id: Id.Lit_Chars val: '\ttest -n "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1891 ) (Token id:Id.Lit_Chars val:'\ttest -f example2/.git &&\n' span_id:1892) (Token id: Id.Lit_Chars val: '\tgit submodule deinit -f init >actual &&\n' span_id: 1893 ) (Token id: Id.Lit_Chars val: '\ttest -z "$(git config --get-regexp "submodule\\.example\\.")" &&\n' span_id: 1894 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1895) (Token id:Id.Lit_Chars val:'\trmdir init\n' span_id:1896) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit is silent when used on an uninitialized submodule' span_id: 1903 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1907) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1908) (Token id:Id.Lit_Chars val:'\tgit submodule deinit init >actual &&\n' span_id:1909) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Submodule .example. (.*) unregistered for path .init" actual &&\n' span_id: 1910 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1911) (Token id: Id.Lit_Chars val: '\tgit submodule deinit init >actual &&\n' span_id: 1912 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&\n' span_id: 1913 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1914) (Token id:Id.Lit_Chars val:'\tgit submodule deinit . >actual &&\n' span_id:1915) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&\n' span_id: 1916 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "Submodule .example2. (.*) unregistered for path .example2" actual &&\n' span_id: 1917 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1918) (Token id:Id.Lit_Chars val:'\tgit submodule deinit . >actual &&\n' span_id:1919) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&\n' span_id: 1920 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep ! "Submodule .example2. (.*) unregistered for path .example2" actual &&\n' span_id: 1921 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1922) (Token id: Id.Lit_Chars val: '\tgit submodule deinit --all >actual &&\n' span_id: 1923 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep ! "Submodule .example. (.*) unregistered for path .init" actual &&\n' span_id: 1924 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep ! "Submodule .example2. (.*) unregistered for path .example2" actual &&\n' span_id: 1925 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Cleared directory .init" actual &&\n' span_id:1926) (Token id:Id.Lit_Chars val:'\trmdir init example2\n' span_id:1927) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule deinit fails when submodule has a .git directory even when forced' span_id: 1934 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1938) (Token id:Id.Lit_Chars val:'\tgit submodule update --init &&\n' span_id:1939) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1940) (Token id:Id.Lit_Chars val:'\t\tcd init &&\n' span_id:1941) (Token id:Id.Lit_Chars val:'\t\trm .git &&\n' span_id:1942) (Token id: Id.Lit_Chars val: '\t\tcp -R ../.git/modules/example .git &&\n' span_id: 1943 ) (Token id:Id.Lit_Chars val:'\t\tGIT_WORK_TREE=. git config --unset core.worktree\n' span_id:1944) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1945) (Token id:Id.Lit_Chars val:'\ttest_must_fail git submodule deinit init &&\n' span_id:1946) (Token id: Id.Lit_Chars val: '\ttest_must_fail git submodule deinit -f init &&\n' span_id: 1947 ) (Token id:Id.Lit_Chars val:'\ttest -d init/.git &&\n' span_id:1948) (Token id: Id.Lit_Chars val: '\ttest -n "$(git config --get-regexp "submodule\\.example\\.")"\n' span_id: 1949 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule with UTF-8 name' span_id:1956))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1960) (Token id: Id.Lit_Chars val: '\tsvname=$(printf "\\303\\245 \\303\\244\\303\\266") &&\n' span_id: 1961 ) (Token id:Id.Lit_Chars val:'\tmkdir "$svname" &&\n' span_id:1962) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1963) (Token id:Id.Lit_Chars val:'\t\tcd "$svname" &&\n' span_id:1964) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1965) (Token id:Id.Lit_Chars val:'\t\t>sub &&\n' span_id:1966) (Token id:Id.Lit_Chars val:'\t\tgit add sub &&\n' span_id:1967) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "init sub"\n' span_id:1968) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1969) (Token id:Id.Lit_Chars val:'\tgit submodule add ./"$svname" &&\n' span_id:1970) (Token id:Id.Lit_Chars val:'\tgit submodule >&2 &&\n' span_id:1971) (Token id:Id.Lit_Chars val:'\ttest -n "$(git submodule | grep "$svname")"\n' span_id:1972) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'submodule add clone shallow submodule' span_id:1979))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1983) (Token id:Id.Lit_Chars val:'\tmkdir super &&\n' span_id:1984) (Token id:Id.Lit_Chars val:'\tpwd=$(pwd) &&\n' span_id:1985) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1986) (Token id:Id.Lit_Chars val:'\t\tcd super &&\n' span_id:1987) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:1988) (Token id: Id.Lit_Chars val: '\t\tgit submodule add --depth=1 file://"$pwd"/example2 submodule &&\n' span_id: 1989 ) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1990) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule &&\n' span_id:1991) (Token id:Id.Lit_Chars val:'\t\t\ttest 1 = $(git log --oneline | wc -l)\n' span_id:1992) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1993) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1994) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'submodule helper list is not confused by common prefixes' span_id: 2001 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2005) (Token id:Id.Lit_Chars val:'\tmkdir -p dir1/b &&\n' span_id:2006) (Token id:Id.Lit_Chars val:'\t(\n' span_id:2007) (Token id:Id.Lit_Chars val:'\t\tcd dir1/b &&\n' span_id:2008) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:2009) (Token id:Id.Lit_Chars val:'\t\techo hi >testfile2 &&\n' span_id:2010) (Token id:Id.Lit_Chars val:'\t\tgit add . &&\n' span_id:2011) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "test1"\n' span_id:2012) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:2013) (Token id:Id.Lit_Chars val:'\tmkdir -p dir2/b &&\n' span_id:2014) (Token id:Id.Lit_Chars val:'\t(\n' span_id:2015) (Token id:Id.Lit_Chars val:'\t\tcd dir2/b &&\n' span_id:2016) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:2017) (Token id:Id.Lit_Chars val:'\t\techo hello >testfile1 &&\n' span_id:2018) (Token id:Id.Lit_Chars val:'\t\tgit add . &&\n' span_id:2019) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "test2"\n' span_id:2020) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:2021) (Token id: Id.Lit_Chars val: '\tgit submodule add /dir1/b dir1/b &&\n' span_id: 2022 ) (Token id:Id.Lit_Chars val:'\tgit submodule add /dir2/b dir2/b &&\n' span_id:2023) (Token id: Id.Lit_Chars val: '\tgit commit -m "first submodule commit" &&\n' span_id: 2024 ) (Token id: Id.Lit_Chars val: '\tgit submodule--helper list dir1/b |cut -c51- >actual &&\n' span_id: 2025 ) (Token id:Id.Lit_Chars val:'\techo "dir1/b" >expect &&\n' span_id:2026) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2027) ) } ) (C {(test_done)}) ] )