(List (= scope= flags=0 words=[] bindings=[('test_description', {[SQ ]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS ./test-lib.sh]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ file &&\n"> ]} ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS fake-editor]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "#!/bin/sh\n"] [LIT_CHARS "cp FAKE_MSG \"$1\"\n"] [LIT_CHARS "exit 0\n"]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[LIT_CHARS fake-editor]} ) (= scope= flags=0 words=[] bindings=[('FAKE_EDITOR', {[DQ [ComSub (Com {[LIT_CHARS pwd]})][LIT_CHARS /fake-editor]]})]) (= scope= flags=1 words=[{[LIT_CHARS FAKE_EDITOR]}] bindings=[]) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ file &&\n"> FAKE_MSG &&\n"> ]} ) (= scope= flags=0 words=[] bindings=[('HOOKDIR', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --git-dir]})][LIT_CHARS /hooks]]})]) (= scope= flags=0 words=[] bindings=[('HOOK', {[DQ [VarSub HOOKDIR][LIT_CHARS /commit-msg]]})]) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub HOOKDIR]]} ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub HOOK]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/bin/sh\n"][LIT_CHARS "exit 0\n"]]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[DQ [VarSub HOOK]]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub HOOK]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/bin/sh\n"][LIT_CHARS "exit 1\n"]]} 0), > ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS chmod]} {[LIT_CHARS -x]} {[DQ [VarSub HOOK]]} ) (Com {[LIT_CHARS test_expect_success]} {[LIT_CHARS POSIXPERM]} {[SQ ]} {[SQ > file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[LIT_CHARS POSIXPERM]} {[SQ ]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[LIT_CHARS POSIXPERM]} {[SQ ]} {[SQ > file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[LIT_CHARS POSIXPERM]} {[SQ ]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub HOOK]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "#!/bin/sh\n"] [LIT_CHARS "echo \"new message\" > \"$1\"\n"] [LIT_CHARS "exit 0\n"]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[DQ [VarSub HOOK]]} ) (FunctionDef commit_msg_is [] (Com {[LIT_CHARS test]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS log]} {[LIT_CHARS --pretty] [LIT_DBRACKET_LIKE "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS s] [LIT_OTHER "%"] [LIT_CHARS b]} {[LIT_CHARS -1]})]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [VarSub 1]]} ) ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "hook doesn't edit commit message"]]} {[SQ > file &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "hook doesn't edit commit message (editor)"]]} {[SQ > file &&\n"> FAKE_MSG &&\n"> ]} ) (Com {[LIT_CHARS test_done]} ) )