(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"Test the post-checkout hook.">)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\techo Data for commit0. >a &&\n"> <"\techo Data for commit0. >b &&\n"> <"\tgit update-index --add a &&\n"> <"\tgit update-index --add b &&\n"> <"\ttree0=$(git write-tree) &&\n"> <"\tcommit0=$(echo setup | git commit-tree $tree0) &&\n"> <"\tgit update-ref refs/heads/master $commit0 &&\n"> <"\tgit clone ./. clone1 &&\n"> <"\tgit clone ./. clone2 &&\n"> <"\tGIT_DIR=clone2/.git git branch new2 &&\n"> <"\techo Data for commit1. >clone2/b &&\n"> <"\tGIT_DIR=clone2/.git git add clone2/b &&\n"> <"\tGIT_DIR=clone2/.git git commit -m new2\n"> ) } ) (ForEach iter_name: clone iter_words: [{(1)} {(2)}] do_arg_iter: False body: (DoGroup children: [ (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(clone) (${ VSub_Name clone) (/.git/hooks/post-checkout)} spids: [61] ) (HereDoc op_id: Redir_DLess fd: -1 body: {("#!/bin/sh\n") ("echo $@ > $GIT_DIR/post-checkout.args\n")} do_expansion: False here_end: EOF was_filled: True spids: [68] ) ] ) (C {(chmod)} {(u) (Lit_Other "+") (x)} {(clone) (${ VSub_Name clone) (/.git/hooks/post-checkout)} ) ] spids: [56 86] ) spids: [50 54] ) (C {(test_expect_success)} {(SQ <"post-checkout runs as expected ">)} { (SQ <"\n"> <"\tGIT_DIR=clone1/.git git checkout master &&\n"> <"\ttest -e clone1/.git/post-checkout.args\n"> ) } ) (C {(test_expect_success)} {(SQ <"post-checkout receives the right arguments with HEAD unchanged ">)} { (SQ <"\n"> <"\told=$(awk \"{print \\$1}\" clone1/.git/post-checkout.args) &&\n"> <"\tnew=$(awk \"{print \\$2}\" clone1/.git/post-checkout.args) &&\n"> <"\tflag=$(awk \"{print \\$3}\" clone1/.git/post-checkout.args) &&\n"> <"\ttest $old = $new && test $flag = 1\n"> ) } ) (C {(test_expect_success)} {(SQ <"post-checkout runs as expected ">)} { (SQ <"\n"> <"\tGIT_DIR=clone1/.git git checkout master &&\n"> <"\ttest -e clone1/.git/post-checkout.args\n"> ) } ) (C {(test_expect_success)} {(SQ <"post-checkout args are correct with git checkout -b ">)} { (SQ <"\n"> <"\tGIT_DIR=clone1/.git git checkout -b new1 &&\n"> <"\told=$(awk \"{print \\$1}\" clone1/.git/post-checkout.args) &&\n"> <"\tnew=$(awk \"{print \\$2}\" clone1/.git/post-checkout.args) &&\n"> <"\tflag=$(awk \"{print \\$3}\" clone1/.git/post-checkout.args) &&\n"> <"\ttest $old = $new && test $flag = 1\n"> ) } ) (C {(test_expect_success)} {(SQ <"post-checkout receives the right args with HEAD changed ">)} { (SQ <"\n"> <"\tGIT_DIR=clone2/.git git checkout new2 &&\n"> <"\told=$(awk \"{print \\$1}\" clone2/.git/post-checkout.args) &&\n"> <"\tnew=$(awk \"{print \\$2}\" clone2/.git/post-checkout.args) &&\n"> <"\tflag=$(awk \"{print \\$3}\" clone2/.git/post-checkout.args) &&\n"> <"\ttest $old != $new && test $flag = 1\n"> ) } ) (C {(test_expect_success)} {(SQ <"post-checkout receives the right args when not switching branches ">)} { (SQ <"\n"> <"\tGIT_DIR=clone2/.git git checkout master b &&\n"> <"\told=$(awk \"{print \\$1}\" clone2/.git/post-checkout.args) &&\n"> <"\tnew=$(awk \"{print \\$2}\" clone2/.git/post-checkout.args) &&\n"> <"\tflag=$(awk \"{print \\$3}\" clone2/.git/post-checkout.args) &&\n"> <"\ttest $old = $new && test $flag = 0\n"> ) } ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(git)} {(config)} {(--bool)} {(core.filemode)})] ) left_token: <Left_CommandSub "$("> spids: [183 191] ) ) } {(Lit_Other "=")} {(true)} ) terminator: <Op_Semi ";"> ) ] action: [ (C {(mkdir)} {(-p)} {(templates/hooks)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(templates/hooks/post-checkout)} spids: [209] ) (HereDoc op_id: Redir_DLess fd: -1 body: {("#!/bin/sh\n") ("echo $@ > $GIT_DIR/post-checkout.args\n")} do_expansion: False here_end: EOF was_filled: True spids: [212] ) ] ) (C {(chmod)} {(Lit_Other "+") (x)} {(templates/hooks/post-checkout)}) (C {(test_expect_success)} {(SQ <"post-checkout hook is triggered by clone">)} { (SQ <"\n"> <"\tgit clone --template=templates . clone3 &&\n"> <"\ttest -f clone3/.git/post-checkout.args\n"> ) } ) ] spids: [-1 199] ) ] spids: [-1 237] ) (C {(test_done)}) ] )