(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <'check pre-push hooks'>)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:HOOKDIR) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(--git-dir)})]) left_token: <Left_CommandSub '$('> spids: [19 25] ) (/hooks) ) } spids: [17] ) ] spids: [17] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:HOOK) op: Equal rhs: {(DQ ($ VSub_Name '$HOOKDIR') (/pre-push))} spids: [29] ) ] spids: [29] ) (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name '$HOOKDIR'))}) (SimpleCommand words: [{(write_script)} {(DQ ($ VSub_Name '$HOOK'))}] redirects: [ (HereDoc op_id: Redir_DLess fd: 16777215 body: {(DQ ('cat >/dev/null\n') ('exit 0\n'))} do_expansion: True here_end: EOF was_filled: T spids: [49] ) ] ) (C {(test_expect_success)} {(SQ <setup>)} { (SQ <'\n'> <'\tgit config push.default upstream &&\n'> <'\tgit init --bare repo1 &&\n'> <'\tgit remote add parent1 repo1 &&\n'> <'\ttest_commit one &&\n'> <'\tgit push parent1 HEAD:foreign\n'> ) } ) (SimpleCommand words: [{(write_script)} {(DQ ($ VSub_Name '$HOOK'))}] redirects: [ (HereDoc op_id: Redir_DLess fd: 16777215 body: {(DQ ('cat >/dev/null\n') ('exit 1\n'))} do_expansion: True here_end: EOF was_filled: T spids: [77] ) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:COMMIT1) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(HEAD)})]) left_token: <Left_CommandSub '$('> spids: [86 92] ) ) } spids: [84] ) ] spids: [84] ) (C {(export)} {(COMMIT1)}) (C {(test_expect_success)} {(SQ <'push with failing hook'>)} {(SQ <'\n'> <'\ttest_commit two &&\n'> <'\ttest_must_fail git push parent1 HEAD\n'>)} ) (C {(test_expect_success)} {(SQ <'--no-verify bypasses hook'>)} {(SQ <'\n'> <'\tgit push --no-verify parent1 HEAD\n'>)} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:COMMIT2) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(HEAD)})]) left_token: <Left_CommandSub '$('> spids: [127 133] ) ) } spids: [125] ) ] spids: [125] ) (C {(export)} {(COMMIT2)}) (SimpleCommand words: [{(write_script)} {(DQ ($ VSub_Name '$HOOK'))}] redirects: [ (HereDoc op_id: Redir_DLess fd: 16777215 body: {('echo "$1" >actual\n') ('echo "$2" >>actual\n') ('cat >>actual\n')} do_expansion: False here_end: EOF was_filled: T spids: [147] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[155]) (HereDoc op_id: Redir_DLess fd: 16777215 body: { (DQ ('parent1\n') ('repo1\n') ('refs/heads/master ') ($ VSub_Name '$COMMIT2') (' refs/heads/foreign ') ($ VSub_Name '$COMMIT1') ('\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [158] ) ] ) (C {(test_expect_success)} {(SQ <'push with hook'>)} {(SQ <'\n'> <'\tgit push parent1 master:foreign &&\n'> <'\tdiff expected actual\n'>)} ) (C {(test_expect_success)} {(SQ <'add a branch'>)} {(SQ <'\n'> <'\tgit checkout -b other parent1/foreign &&\n'> <'\ttest_commit three\n'>)} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:COMMIT3) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(git)} {(rev-parse)} {(HEAD)})]) left_token: <Left_CommandSub '$('> spids: [198 204] ) ) } spids: [196] ) ] spids: [196] ) (C {(export)} {(COMMIT3)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[214]) (HereDoc op_id: Redir_DLess fd: 16777215 body: { (DQ ('parent1\n') ('repo1\n') ('refs/heads/other ') ($ VSub_Name '$COMMIT3') (' refs/heads/foreign ') ($ VSub_Name '$COMMIT2') ('\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [217] ) ] ) (C {(test_expect_success)} {(SQ <'push to default'>)} {(SQ <'\n'> <'\tgit push &&\n'> <'\tdiff expected actual\n'>)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[244]) (HereDoc op_id: Redir_DLess fd: 16777215 body: { (DQ ('parent1\n') ('repo1\n') ('refs/tags/one ') ($ VSub_Name '$COMMIT1') (' refs/tags/tag1 ') ($ VSub_Name '$_z40') ('\n') ('HEAD~ ') ($ VSub_Name '$COMMIT2') (' refs/heads/prev ') ($ VSub_Name '$_z40') ('\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [247] ) ] ) (C {(test_expect_success)} {(SQ <'push non-branches'>)} { (SQ <'\n'> <'\tgit push parent1 one:tag1 HEAD~:refs/heads/prev &&\n'> <'\tdiff expected actual\n'> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[279]) (HereDoc op_id: Redir_DLess fd: 16777215 body: { (DQ ('parent1\n') ('repo1\n') ('(delete) ') ($ VSub_Name '$_z40') (' refs/heads/prev ') ($ VSub_Name '$COMMIT2') ('\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [282] ) ] ) (C {(test_expect_success)} {(SQ <'push delete'>)} {(SQ <'\n'> <'\tgit push parent1 :prev &&\n'> <'\tdiff expected actual\n'>)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[309]) (HereDoc op_id: Redir_DLess fd: 16777215 body: { (DQ ('repo1\n') ('repo1\n') ('HEAD ') ($ VSub_Name '$COMMIT3') (' refs/heads/other ') ($ VSub_Name '$_z40') ('\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [312] ) ] ) (C {(test_expect_success)} {(SQ <'push to URL'>)} {(SQ <'\n'> <'\tgit push repo1 HEAD &&\n'> <'\tdiff expected actual\n'>)} ) (C {(test_expect_success)} {(SQ <'set up many-ref tests'>)} { (SQ <'\n'> <'\t{\n'> <'\t\tnr=1000\n'> <'\t\twhile test $nr -lt 2000\n'> <'\t\tdo\n'> <'\t\t\tnr=$(( $nr + 1 ))\n'> <'\t\t\techo "create refs/heads/b/$nr $COMMIT3"\n'> <'\t\tdone\n'> <'\t} | git update-ref --stdin\n'> ) } ) (C {(test_expect_success)} {(SQ <'sigpipe does not cause pre-push hook failure'>)} { (SQ <'\n'> <'\techo "exit 0" | write_script "$HOOK" &&\n'> <'\tgit push parent1 "refs/heads/b/*:refs/heads/b/*"\n'> ) } ) (C {(test_done)}) ] )