(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <'pushing to a repository using push options'>)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (FuncDef name: mk_repo_pair body: (BraceGroup children: [ (AndOr children: [ (C {(rm)} {(-rf)} {(workbench)} {(upstream)}) (AndOr children: [ (C {(test_create_repo)} {(upstream)}) (AndOr children: [ (C {(test_create_repo)} {(workbench)}) (AndOr children: [ (Subshell child: (CommandList children: [ (AndOr children: [ (C {(cd)} {(upstream)}) (AndOr children: [ (C {(git)} {(config)} {(receive.denyCurrentBranch)} {(warn)}) (AndOr children: [ (C {(mkdir)} {(-p)} {(.git/hooks)}) (AndOr children: [ (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(.git/hooks/pre-receive)} spids: [80] ) (HereDoc op_id: Redir_DLessDash fd: -1 body: {('#!/bin/sh\n') ( 'if test -n "$GIT_PUSH_OPTION_COUNT"; then\n' ) ('i=0\n') ('>hooks/pre-receive.push_options\n') ('while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do\n') ( 'eval "value=\\$GIT_PUSH_OPTION_$i"\n' ) ('echo $value >>hooks/pre-receive.push_options\n') ('i=$((i + 1))\n') ('done\n') ('fi\n') } do_expansion: False here_end: EOF was_filled: True spids: [83] ) ] ) (C {(chmod)} {(u) (Lit_Other '+') (x)} {(.git/hooks/pre-receive)} ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (AndOr children: [ (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(.git/hooks/post-receive)} spids: [103] ) (HereDoc op_id: Redir_DLessDash fd: -1 body: {('#!/bin/sh\n') ('if test -n "$GIT_PUSH_OPTION_COUNT"; then\n') ('i=0\n') ('>hooks/post-receive.push_options\n') ('while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do\n') ('eval "value=\\$GIT_PUSH_OPTION_$i"\n') ('echo $value >>hooks/post-receive.push_options\n') ('i=$((i + 1))\n') ('done\n') ('fi\n') } do_expansion: False here_end: EOF was_filled: True spids: [106] ) ] ) (C {(chmod)} {(u) (Lit_Other '+') (x)} {(.git/hooks/post-receive)} ) ] op_id: Op_DAmp ) ] ) spids: [48 123] ) (Subshell child: (AndOr children: [ (C {(cd)} {(workbench)}) (C {(git)} {(remote)} {(add)} {(up)} {(../upstream)}) ] op_id: Op_DAmp ) spids: [128 149] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [20] ) spids: [15 19] ) (FuncDef name: test_refs body: (BraceGroup children: [ (AndOr children: [ (C {(test)} {($ VSub_Pound '$#')} {(Lit_Other '=')} {(2)}) (AndOr children: [ (SimpleCommand words: [ {(git)} {(-C)} {(upstream)} {(rev-parse)} {(--verify)} {(DQ ($ VSub_Number '$1'))} ] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[193])] ) (AndOr children: [ (SimpleCommand words: [ {(git)} {(-C)} {(workbench)} {(rev-parse)} {(--verify)} {(DQ ($ VSub_Number '$2'))} ] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(actual)} spids:[213])] ) (C {(test_cmp)} {(expect)} {(actual)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [165] ) spids: [160 164] ) (C {(test_expect_success)} {(SQ <'one push option works for a single branch'>)} { (SQ <'\n'> <'\tmk_repo_pair &&\n'> <'\tgit -C upstream config receive.advertisePushOptions true &&\n'> <'\t(\n'> <'\t\tcd workbench &&\n'> <'\t\ttest_commit one &&\n'> <'\t\tgit push --mirror up &&\n'> <'\t\ttest_commit two &&\n'> <'\t\tgit push --push-option=asdf up master\n'> <'\t) &&\n'> <'\ttest_refs master master &&\n'> <'\techo "asdf" >expect &&\n'> <'\ttest_cmp expect upstream/.git/hooks/pre-receive.push_options &&\n'> <'\ttest_cmp expect upstream/.git/hooks/post-receive.push_options\n'> ) } ) (C {(test_expect_success)} {(SQ <'push option denied by remote'>)} { (SQ <'\n'> <'\tmk_repo_pair &&\n'> <'\tgit -C upstream config receive.advertisePushOptions false &&\n'> <'\t(\n'> <'\t\tcd workbench &&\n'> <'\t\ttest_commit one &&\n'> <'\t\tgit push --mirror up &&\n'> <'\t\ttest_commit two &&\n'> <'\t\ttest_must_fail git push --push-option=asdf up master\n'> <'\t) &&\n'> <'\ttest_refs master HEAD@{1}\n'> ) } ) (C {(test_expect_success)} {(SQ <'two push options work'>)} { (SQ <'\n'> <'\tmk_repo_pair &&\n'> <'\tgit -C upstream config receive.advertisePushOptions true &&\n'> <'\t(\n'> <'\t\tcd workbench &&\n'> <'\t\ttest_commit one &&\n'> <'\t\tgit push --mirror up &&\n'> <'\t\ttest_commit two &&\n'> <'\t\tgit push --push-option=asdf --push-option="more structured text" up master\n'> <'\t) &&\n'> <'\ttest_refs master master &&\n'> <'\tprintf "asdf\\nmore structured text\\n" >expect &&\n'> <'\ttest_cmp expect upstream/.git/hooks/pre-receive.push_options &&\n'> <'\ttest_cmp expect upstream/.git/hooks/post-receive.push_options\n'> ) } ) (C {(test_done)}) ] )