(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:'send-pack --stdin tests' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: create_ref body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tree) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:23) command_list: (command.CommandList children:[(C {(git)} {(write-tree)})]) ) } spids: [22] ) ] ) (C {(test_tick)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:commit) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:38) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(git)} {(commit-tree)} {($ Id.VSub_DollarName '$tree')}) ] negated: F ) ] ) ) } spids: [37] ) ] ) (C {(git)} {(update-ref)} {(DQ ($ Id.VSub_Number '$1'))} {($ Id.VSub_DollarName '$commit')} ) ] ) ] ) ) (command.ShFunction name: clear_remote body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(rm)} {(-rf)} {(remote.git)}) (C {(git)} {(init)} {(--bare)} {(remote.git)}) ] ) ] ) ) (command.ShFunction name: verify_push body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [{(git)} {(rev-parse)} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:114) fd: -1 arg_word: {(expect)} ) ] ) (command.Simple words: [ {(git)} {(--git-dir) (Id.Lit_Equals '=') (remote.git)} {(rev-parse)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Number val:2 span_id:130) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {($ Id.VSub_Number '$1')} ) ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:136) fd: -1 arg_word: {(actual)} ) ] ) (C {(test_cmp)} {(expect)} {(actual)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup refs' span_id:154))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:158) (Token id:Id.Lit_Chars val:'\tcat >refs <<-\\EOF &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\trefs/heads/A\n' span_id:160) (Token id:Id.Lit_Chars val:'\trefs/heads/C\n' span_id:161) (Token id:Id.Lit_Chars val:'\trefs/tags/D\n' span_id:162) (Token id:Id.Lit_Chars val:'\trefs/heads/B\n' span_id:163) (Token id:Id.Lit_Chars val:'\trefs/tags/E\n' span_id:164) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:165) (Token id:Id.Lit_Chars val:'\tfor i in $(cat refs); do\n' span_id:166) (Token id:Id.Lit_Chars val:'\t\tcreate_ref $i || return 1\n' span_id:167) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:168) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'refs on cmdline' span_id:178))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:182) (Token id:Id.Lit_Chars val:'\tclear_remote &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\tgit send-pack remote.git $(cat refs) &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\tfor i in $(cat refs); do\n' span_id:185) (Token id:Id.Lit_Chars val:'\t\tverify_push $i || return 1\n' span_id:186) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:187) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'refs over stdin' span_id:194))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:198) (Token id:Id.Lit_Chars val:'\tclear_remote &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\tgit send-pack remote.git --stdin <refs &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tfor i in $(cat refs); do\n' span_id:201) (Token id:Id.Lit_Chars val:'\t\tverify_push $i || return 1\n' span_id:202) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:203) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stdin lines are full refspecs' span_id:210))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:214) (Token id:Id.Lit_Chars val:'\tclear_remote &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\techo "A:other" >input &&\n' span_id:216) (Token id: Id.Lit_Chars val: '\tgit send-pack remote.git --stdin <input &&\n' span_id: 217 ) (Token id:Id.Lit_Chars val:'\tverify_push refs/heads/A refs/heads/other\n' span_id:218) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stdin mixed with cmdline' span_id:225))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:229) (Token id:Id.Lit_Chars val:'\tclear_remote &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\techo A >input &&\n' span_id:231) (Token id: Id.Lit_Chars val: '\tgit send-pack remote.git --stdin B <input &&\n' span_id: 232 ) (Token id:Id.Lit_Chars val:'\tverify_push A &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\tverify_push B\n' span_id:234) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cmdline refs written in order' span_id:241))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:245) (Token id:Id.Lit_Chars val:'\tclear_remote &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\ttest_must_fail git send-pack remote.git A:foo B:foo &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\tverify_push A foo\n' span_id:248) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--stdin refs come after cmdline' span_id:255))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:259) (Token id:Id.Lit_Chars val:'\tclear_remote &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\techo A:foo >input &&\n' span_id:261) (Token id: Id.Lit_Chars val: '\ttest_must_fail git send-pack remote.git --stdin B:foo <input &&\n' span_id: 262 ) (Token id:Id.Lit_Chars val:'\tverify_push B foo\n' span_id:263) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'refspecs and --mirror do not mix (cmdline)' span_id:270))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:274) (Token id:Id.Lit_Chars val:'\tclear_remote &&\n' span_id:275) (Token id: Id.Lit_Chars val: '\ttest_must_fail git send-pack remote.git --mirror $(cat refs)\n' span_id: 276 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'refspecs and --mirror do not mix (stdin)' span_id:283))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:287) (Token id:Id.Lit_Chars val:'\tclear_remote &&\n' span_id:288) (Token id: Id.Lit_Chars val: '\ttest_must_fail git send-pack remote.git --mirror --stdin <refs\n' span_id: 289 ) ) } ) (C {(test_done)}) ] )