(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'test_description='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'test_description='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description) op: assign_op.Equal rhs: {(SQ <'check pre-push hooks'>)} ) ] redirects: [] ) (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {<'./test-lib.sh'>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'HOOKDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'HOOKDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'HOOKDIR='> name:HOOKDIR) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--git-dir>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) <'/hooks'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'HOOK='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'HOOK='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'HOOK='> name:HOOK) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName HOOKDIR) <'/pre-push'>)} ) ] redirects: [] ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName HOOKDIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <write_script> more_env: [] words: [{<write_script>} {(DQ ($ Id.VSub_DollarName HOOK))}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'cat >/dev/null\n'> <'exit 0\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<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'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <write_script> more_env: [] words: [{<write_script>} {(DQ ($ Id.VSub_DollarName HOOK))}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'cat >/dev/null\n'> <'exit 1\n'>] ) ) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'COMMIT1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMMIT1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMMIT1='> name:COMMIT1) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<HEAD>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <export> more_env: [] words: [{<export>} {<COMMIT1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'push with failing hook'>)} {(SQ <'\n'> <'\ttest_commit two &&\n'> <'\ttest_must_fail git push parent1 HEAD\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'--no-verify bypasses hook'>)} {(SQ <'\n'> <'\tgit push --no-verify parent1 HEAD\n'>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'COMMIT2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMMIT2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMMIT2='> name:COMMIT2) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<HEAD>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <export> more_env: [] words: [{<export>} {<COMMIT2>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <write_script> more_env: [] words: [{<write_script>} {(DQ ($ Id.VSub_DollarName HOOK))}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(SQ <EOF>)} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [<'echo "$1" >actual\n'> <'echo "$2" >>actual\n'> <'cat >>actual\n'>] ) ) ] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>}) (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'parent1\n'> <'repo1\n'> <'refs/heads/master '> ($ Id.VSub_DollarName COMMIT2) <' refs/heads/foreign '> ($ Id.VSub_DollarName COMMIT1) <'\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'push with hook'>)} {(SQ <'\n'> <'\tgit push parent1 master:foreign &&\n'> <'\tdiff expected actual\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'add a branch'>)} {(SQ <'\n'> <'\tgit checkout -b other parent1/foreign &&\n'> <'\ttest_commit three\n'>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'COMMIT3='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMMIT3='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMMIT3='> name:COMMIT3) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<HEAD>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.Simple blame_tok: <export> more_env: [] words: [{<export>} {<COMMIT3>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>}) (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'parent1\n'> <'repo1\n'> <'refs/heads/other '> ($ Id.VSub_DollarName COMMIT3) <' refs/heads/foreign '> ($ Id.VSub_DollarName COMMIT2) <'\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'push to default'>)} {(SQ <'\n'> <'\tgit push &&\n'> <'\tdiff expected actual\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>}) (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'parent1\n'> <'repo1\n'> <'refs/tags/one '> ($ Id.VSub_DollarName COMMIT1) <' refs/tags/tag1 '> ($ Id.VSub_DollarName _z40) <'\n'> <'HEAD~ '> ($ Id.VSub_DollarName COMMIT2) <' refs/heads/prev '> ($ Id.VSub_DollarName _z40) <'\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'push non-branches'>)} { (SQ <'\n'> <'\tgit push parent1 one:tag1 HEAD~:refs/heads/prev &&\n'> <'\tdiff expected actual\n'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>}) (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'parent1\n'> <'repo1\n'> <'(delete) '> ($ Id.VSub_DollarName _z40) <' refs/heads/prev '> ($ Id.VSub_DollarName COMMIT2) <'\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'push delete'>)} {(SQ <'\n'> <'\tgit push parent1 :prev &&\n'> <'\tdiff expected actual\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>}) (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'repo1\n'> <'repo1\n'> <'HEAD '> ($ Id.VSub_DollarName COMMIT3) <' refs/heads/other '> ($ Id.VSub_DollarName _z40) <'\n'> ] ) ) ] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<test_expect_success>} {(SQ <'push to URL'>)} {(SQ <'\n'> <'\tgit push repo1 HEAD &&\n'> <'\tdiff expected actual\n'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<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'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_expect_success> more_env: [] words: [ {<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'> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test_done> more_env: [] words: [{<test_done>}] redirects: [] do_fork: T ) ] )