(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:'git remote group handling' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: mark body: (command.BraceGroup children: [ (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:27) fd: -1 arg_word: {(mark)} ) ] ) ] ) ) (command.ShFunction name: update_repo body: (command.BraceGroup children: [ (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(cd)} {($ Id.VSub_Number '$1')}) (command.Simple words: [{(echo)} {(content)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:52) fd: -1 arg_word: {(file)} ) ] ) (C {(git)} {(add)} {(file)}) (C {(git)} {(commit)} {(-F)} {(../mark)}) ] ) ] ) ) ] ) ) (command.ShFunction name: update_repos body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(update_repo)} {(one)} {($ Id.VSub_Number '$1')}) (C {(update_repo)} {(two)} {($ Id.VSub_Number '$1')}) ] ) ] ) ) (command.ShFunction name: repo_fetched body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:116) command_list: (command.CommandList children: [ (C {(git)} {(log)} {(-1)} {(--pretty) (Id.Lit_Equals '=') (format) (Id.Lit_Other ':') (Id.Lit_Other '%') (s) } {($ Id.VSub_Number '$1')} {(--)} ) ] ) ) ) } {(Id.Lit_Equals '=')} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:139) command_list: (command.CommandList children:[(C {(cat)} {(mark)})]) ) ) } ) terminator: (Token id:Id.Op_Semi val:';' span_id:145) ) ] action: [ (command.Simple words: [{(echo)} {(DQ ('repo was fetched: ') ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:152) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:161) arg_word: {(0)} ) ] spids: [111 147] ) ] ) (command.Simple words: [{(echo)} {(DQ ('repo was not fetched: ') ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:171) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:180) arg_word: {(1)} ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:190))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:194) (Token id: Id.Lit_Chars val: '\tmkdir one && (cd one && git init) &&\n' span_id: 195 ) (Token id:Id.Lit_Chars val:'\tmkdir two && (cd two && git init) &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\tgit remote add -m master one one &&\n' span_id:197) (Token id:Id.Lit_Chars val:'\tgit remote add -m master two two\n' span_id:198) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no group updates all' span_id:205))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:209) (Token id:Id.Lit_Chars val:'\tmark update-all &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tupdate_repos &&\n' span_id:211) (Token id:Id.Lit_Chars val:'\tgit remote update &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\trepo_fetched one &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\trepo_fetched two\n' span_id:214) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'nonexistent group produces error' span_id:221))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:225) (Token id:Id.Lit_Chars val:'\tmark nonexistent &&\n' span_id:226) (Token id:Id.Lit_Chars val:'\tupdate_repos &&\n' span_id:227) (Token id: Id.Lit_Chars val: '\ttest_must_fail git remote update nonexistent &&\n' span_id: 228 ) (Token id:Id.Lit_Chars val:'\t! repo_fetched one &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\t! repo_fetched two\n' span_id:230) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'updating group updates all members (remote update)' span_id: 237 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) (Token id:Id.Lit_Chars val:'\tmark group-all &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\tupdate_repos &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\tgit config --add remotes.all one &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\tgit config --add remotes.all two &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\tgit remote update all &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\trepo_fetched one &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\trepo_fetched two\n' span_id:248) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'updating group updates all members (fetch)' span_id:255))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:259) (Token id:Id.Lit_Chars val:'\tmark fetch-group-all &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\tupdate_repos &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tgit fetch all &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\trepo_fetched one &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\trepo_fetched two\n' span_id:264) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'updating group does not update non-members (remote update)' span_id: 271 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:275) (Token id:Id.Lit_Chars val:'\tmark group-some &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\tupdate_repos &&\n' span_id:277) (Token id: Id.Lit_Chars val: '\tgit config --add remotes.some one &&\n' span_id: 278 ) (Token id:Id.Lit_Chars val:'\tgit remote update some &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\trepo_fetched one &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\t! repo_fetched two\n' span_id:281) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'updating group does not update non-members (fetch)' span_id: 288 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:292) (Token id:Id.Lit_Chars val:'\tmark fetch-group-some &&\n' span_id:293) (Token id:Id.Lit_Chars val:'\tupdate_repos &&\n' span_id:294) (Token id: Id.Lit_Chars val: '\tgit config --add remotes.some one &&\n' span_id: 295 ) (Token id:Id.Lit_Chars val:'\tgit remote update some &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\trepo_fetched one &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\t! repo_fetched two\n' span_id:298) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'updating remote name updates that remote' span_id:305))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:309) (Token id:Id.Lit_Chars val:'\tmark remote-name &&\n' span_id:310) (Token id:Id.Lit_Chars val:'\tupdate_repos &&\n' span_id:311) (Token id:Id.Lit_Chars val:'\tgit remote update one &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\trepo_fetched one &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\t! repo_fetched two\n' span_id:314) ) } ) (C {(test_done)}) ] )