(List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub TEST_DIRECTORY]]}) (= scope= flags=0 words=[] bindings=[('TEST_DIRECTORY', {[ComSub (Com {[LIT_CHARS pwd]})]})]) (ElseTrue) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('TEST_DIRECTORY', {[ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [VarSub TEST_DIRECTORY]]}) (Com {[LIT_CHARS pwd]}) )]})]) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub TEST_OUTPUT_DIRECTORY]]}) (= scope= flags=0 words=[] bindings=[('TEST_OUTPUT_DIRECTORY', {[VarSub TEST_DIRECTORY]})]) ) (= scope= flags=0 words=[] bindings=[('GIT_BUILD_DIR', {[DQ [VarSub TEST_DIRECTORY]] [LIT_CHARS /..]})]) (Com {[DQ [VarSub GIT_BUILD_DIR][LIT_CHARS /git]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (If (Com {[LIT_CHARS test]} {[VarSub ?]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 1]}) (List (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (Com {[LIT_CHARS .]} {[DQ [VarSub GIT_BUILD_DIR]] [LIT_CHARS /GIT-BUILD-OPTIONS]}) (= scope= flags=1 words=[{[LIT_CHARS PERL_PATH]}, {[LIT_CHARS SHELL_PATH]}] bindings=[]) (Case to_match={[DQ [VarSub GIT_TEST_TEE_STARTED][LIT_CHARS ", "][VarSub *][LIT_CHARS " "]]}, pat_word_list=[[{[LIT_CHARS done] [LIT_COMMA ","] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"] [SQ ] [LIT_OTHER "*"]}, {[LIT_OTHER "*"] [SQ ] [LIT_OTHER "*"]}, {[LIT_OTHER "*"] [SQ ] [LIT_OTHER "*"]}]] (ElseTrue) (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub TEST_OUTPUT_DIRECTORY][LIT_CHARS /test-results]]}) (= scope= flags=0 words=[] bindings=[('BASE', {[DQ [VarSub TEST_OUTPUT_DIRECTORY][LIT_CHARS /test-results/][ComSub (Com {[LIT_CHARS basename]} {[DQ [VarSub 0]]} {[LIT_CHARS .sh]})]]})]) (= scope= flags=0 words=[] bindings=[('GIT_TEST_TEE_OUTPUT_FILE', {[VarSub BASE] [LIT_CHARS .out]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_TEST_TEE_OUTPUT_FILE]}] bindings=[]) (Com < (FilenameRedirectNode filename={[DQ [VarSub GIT_TEST_TEE_OUTPUT_FILE]]} "> 1), > ) (Pipeline (Subshell (List (Com {[VarSub SHELL_PATH]} {[DQ [VarSub 0]]} {[DQ [VarSub @]]} < (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > more_env=[('GIT_TEST_TEE_STARTED', {[LIT_CHARS done]})] ) (Com {[LIT_CHARS echo]} {[VarSub ?]} < (FilenameRedirectNode filename={[DQ [VarSub BASE][LIT_CHARS .exit]]} "> 1), > ) ) ) (Com {[LIT_CHARS tee]} {[LIT_CHARS -a]} {[DQ [VarSub GIT_TEST_TEE_OUTPUT_FILE]]}) ) (Com {[LIT_CHARS test]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub BASE][LIT_CHARS .exit]]})]]} {[LIT_OTHER "="]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS exit]}) ) ) (= scope= flags=0 words=[] bindings=[('LANG', {[LIT_CHARS C]})]) (= scope= flags=0 words=[] bindings=[('LC_ALL', {[LIT_CHARS C]})]) (= scope= flags=0 words=[] bindings=[('PAGER', {[LIT_CHARS cat]})]) (= scope= flags=0 words=[] bindings=[('TZ', {[LIT_CHARS UTC]})]) (= scope= flags=1 words=[{[LIT_CHARS LANG]}, {[LIT_CHARS LC_ALL]}, {[LIT_CHARS PAGER]}, {[LIT_CHARS TZ]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('EDITOR', {[LIT_OTHER ":"]})]) (Com {[LIT_CHARS unset]} {[LIT_CHARS VISUAL]} {[LIT_CHARS EMAIL]} {[LIT_CHARS LANGUAGE]} {[LIT_CHARS COLUMNS]} {[ComSub (Com {[DQ [VarSub PERL_PATH]]} {[LIT_CHARS -e]} {[SQ ]})]}) (Com {[LIT_CHARS unset]} {[LIT_CHARS XDG_CONFIG_HOME]}) (Com {[LIT_CHARS unset]} {[LIT_CHARS GITPERLLIB]}) (= scope= flags=0 words=[] bindings=[('GIT_AUTHOR_EMAIL', {[LIT_CHARS author] [LIT_OTHER "@"] [LIT_CHARS example.com]})]) (= scope= flags=0 words=[] bindings=[('GIT_AUTHOR_NAME', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('GIT_COMMITTER_EMAIL', {[LIT_CHARS committer] [LIT_OTHER "@"] [LIT_CHARS example.com]})]) (= scope= flags=0 words=[] bindings=[('GIT_COMMITTER_NAME', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('GIT_MERGE_VERBOSITY', {[LIT_CHARS 5]})]) (= scope= flags=0 words=[] bindings=[('GIT_MERGE_AUTOEDIT', {[LIT_CHARS no]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_MERGE_VERBOSITY]}, {[LIT_CHARS GIT_MERGE_AUTOEDIT]}] bindings=[]) (= scope= flags=1 words=[{[LIT_CHARS GIT_AUTHOR_EMAIL]}, {[LIT_CHARS GIT_AUTHOR_NAME]}] bindings=[]) (= scope= flags=1 words=[{[LIT_CHARS GIT_COMMITTER_EMAIL]}, {[LIT_CHARS GIT_COMMITTER_NAME]}] bindings=[]) (= scope= flags=1 words=[{[LIT_CHARS EDITOR]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('GIT_TRACE_BARE', {[LIT_CHARS 1]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_TRACE_BARE]}] bindings=[]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub TEST_GIT_INDEX_VERSION test_op=VS_TEST_COLON_PLUS {[LIT_CHARS isset]}]]}) (List (= scope= flags=0 words=[] bindings=[('GIT_INDEX_VERSION', {[DQ [VarSub TEST_GIT_INDEX_VERSION]]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_INDEX_VERSION]}] bindings=[]) ) ) (If (AndOr OP_OR_IF (Com {[LIT_CHARS expr]} {[DQ [LIT_CHARS " "][VarSub GIT_TEST_OPTS][LIT_CHARS " "]]} {[LIT_OTHER ":"]} {[DQ [LIT_CHARS ".* --valgrind "]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub TEST_NO_MALLOC_CHECK]]}) ) (List (FunctionDef setup_malloc_check [] (Com {[LIT_OTHER ":"]} {[LIT_CHARS nothing]}) ) (FunctionDef teardown_malloc_check [] (Com {[LIT_OTHER ":"]} {[LIT_CHARS nothing]}) ) ) (ElseTrue) (List (FunctionDef setup_malloc_check [] (List (= scope= flags=0 words=[] bindings=[('MALLOC_CHECK_', {[LIT_CHARS 3]}), ('MALLOC_PERTURB_', {[LIT_CHARS 165]})]) (= scope= flags=1 words=[{[LIT_CHARS MALLOC_CHECK_]}, {[LIT_CHARS MALLOC_PERTURB_]}] bindings=[]) ) ) (FunctionDef teardown_malloc_check [] (Com {[LIT_CHARS unset]} {[LIT_CHARS MALLOC_CHECK_]} {[LIT_CHARS MALLOC_PERTURB_]}) ) ) ) (Com {[LIT_OTHER ":"]} {[VarSub ASAN_OPTIONS test_op=VS_TEST_EQUALS {[LIT_CHARS "detect_leaks=0"]}]}) (= scope= flags=1 words=[{[LIT_CHARS ASAN_OPTIONS]}] bindings=[]) (Com {[LIT_CHARS unset]} {[LIT_CHARS CDPATH]}) (Com {[LIT_CHARS unset]} {[LIT_CHARS GREP_OPTIONS]}) (Com {[LIT_CHARS unset]} {[LIT_CHARS UNZIP]}) (Case to_match={[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub GIT_TRACE]}) (Com {[LIT_CHARS tr]} {[DQ [LIT_CHARS "[A-Z]"]]} {[DQ [LIT_CHARS "[a-z]"]]}) )]}, pat_word_list=[[{[LIT_CHARS 1]}, {[LIT_CHARS 2]}, {[LIT_CHARS true]}]] (= scope= flags=0 words=[] bindings=[('GIT_TRACE', {[LIT_CHARS 4]})]) ) (= scope= flags=0 words=[] bindings=[('_x05', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('_x40', {[DQ [VarSub _x05][VarSub _x05][VarSub _x05][VarSub _x05][VarSub _x05][VarSub _x05][VarSub _x05][VarSub _x05]]})]) (= scope= flags=0 words=[] bindings=[('_z40', {[LIT_CHARS 0000000000000000000000000000000000000000]})]) (= scope= flags=0 words=[] bindings=[('EMPTY_TREE', {[LIT_CHARS 4b825dc642cb6eb9a060e54bf8d69288fbee4904]})]) (= scope= flags=0 words=[] bindings=[('EMPTY_BLOB', {[LIT_CHARS e69de29bb2d1d6434b8b29ae775ad8c2e48c5391]})]) (= scope= flags=0 words=[] bindings=[('LF', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('u200c', {[ComSub (Com {[LIT_CHARS printf]} {[SQ ]})]})]) (= scope= flags=1 words=[{[LIT_CHARS _x05]}, {[LIT_CHARS _x40]}, {[LIT_CHARS _z40]}, {[LIT_CHARS LF]}, {[LIT_CHARS u200c]}, {[LIT_CHARS EMPTY_TREE]}, {[LIT_CHARS EMPTY_BLOB]}] bindings=[]) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [LIT_CHARS x][VarSub TERM]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [LIT_CHARS xdumb]]}) (AndOr OP_AND_IF (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -t]} {[LIT_CHARS 1]}) (AndOr OP_AND_IF (Com {[LIT_CHARS tput]} {[LIT_CHARS bold]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS tput]} {[LIT_CHARS setaf]} {[LIT_CHARS 1]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (Com {[LIT_CHARS tput]} {[LIT_CHARS sgr0]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) ) ) ) (= scope= flags=0 words=[] bindings=[('color', {[LIT_CHARS t]})]) ) ) (While (Com {[LIT_CHARS test]} {[DQ [VarSub #]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]}) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS -d]}, {[LIT_CHARS --d]}, {[LIT_CHARS --de]}, {[LIT_CHARS --deb]}, {[LIT_CHARS --debu]}, {[LIT_CHARS --debug]}], [{[LIT_CHARS -i]}, {[LIT_CHARS --i]}, {[LIT_CHARS --im]}, {[LIT_CHARS --imm]}, {[LIT_CHARS --imme]}, {[LIT_CHARS --immed]}, {[LIT_CHARS --immedi]}, {[LIT_CHARS --immedia]}, {[LIT_CHARS --immediat]}, {[LIT_CHARS --immediate]}], [{[LIT_CHARS -l]}, {[LIT_CHARS --l]}, {[LIT_CHARS --lo]}, {[LIT_CHARS --lon]}, {[LIT_CHARS --long]}, {[LIT_CHARS --long-]}, {[LIT_CHARS --long-t]}, {[LIT_CHARS --long-te]}, {[LIT_CHARS --long-tes]}, {[LIT_CHARS --long-test]}, {[LIT_CHARS --long-tests]}], [{[LIT_CHARS -r]}], [{[LIT_CHARS --run] [LIT_OTHER "="] [LIT_OTHER "*"]}], [{[LIT_CHARS -h]}, {[LIT_CHARS --h]}, {[LIT_CHARS --he]}, {[LIT_CHARS --hel]}, {[LIT_CHARS --help]}], [{[LIT_CHARS -v]}, {[LIT_CHARS --v]}, {[LIT_CHARS --ve]}, {[LIT_CHARS --ver]}, {[LIT_CHARS --verb]}, {[LIT_CHARS --verbo]}, {[LIT_CHARS --verbos]}, {[LIT_CHARS --verbose]}], [{[LIT_CHARS --verbose-only] [LIT_OTHER "="] [LIT_OTHER "*"]}], [{[LIT_CHARS -q]}, {[LIT_CHARS --q]}, {[LIT_CHARS --qu]}, {[LIT_CHARS --qui]}, {[LIT_CHARS --quie]}, {[LIT_CHARS --quiet]}], [{[LIT_CHARS --with-dashes]}], [{[LIT_CHARS --no-color]}], [{[LIT_CHARS --va]}, {[LIT_CHARS --val]}, {[LIT_CHARS --valg]}, {[LIT_CHARS --valgr]}, {[LIT_CHARS --valgri]}, {[LIT_CHARS --valgrin]}, {[LIT_CHARS --valgrind]}], [{[LIT_CHARS --valgrind] [LIT_OTHER "="] [LIT_OTHER "*"]}], [{[LIT_CHARS --valgrind-only] [LIT_OTHER "="] [LIT_OTHER "*"]}], [{[LIT_CHARS --tee]}], [{[LIT_CHARS --root] [LIT_OTHER "="] [LIT_OTHER "*"]}], [{[LIT_CHARS --chain-lint]}], [{[LIT_CHARS --no-chain-lint]}], [{[LIT_CHARS -x]}], [{[LIT_CHARS --verbose-log]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('debug', {[LIT_CHARS t]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('immediate', {[LIT_CHARS t]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('GIT_TEST_LONG', {[LIT_CHARS t]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_TEST_LONG]}] bindings=[]) (Com {[LIT_CHARS shift]}) ) (List (Com {[LIT_CHARS shift]}) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub #]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]}) (List (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=0 words=[] bindings=[('run_list', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('run_list', {[VarSub 1 transform_ops=[VS_UNARY_POUND {[LIT_CHARS "--*="]}]]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('help', {[LIT_CHARS t]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('verbose', {[LIT_CHARS t]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('verbose_only', {[VarSub 1 transform_ops=[VS_UNARY_POUND {[LIT_CHARS "--*="]}]]})]) (Com {[LIT_CHARS shift]}) ) (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub HARNESS_ACTIVE]]}) (= scope= flags=0 words=[] bindings=[('quiet', {[LIT_CHARS t]})]) ) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('with_dashes', {[LIT_CHARS t]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('color', {[SQ ]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('valgrind', {[LIT_CHARS memcheck]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('valgrind', {[VarSub 1 transform_ops=[VS_UNARY_POUND {[LIT_CHARS "--*="]}]]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('valgrind_only', {[VarSub 1 transform_ops=[VS_UNARY_POUND {[LIT_CHARS "--*="]}]]})]) (Com {[LIT_CHARS shift]}) ) (Com {[LIT_CHARS shift]}) (List (= scope= flags=0 words=[] bindings=[('root', {[VarSub 1 transform_ops=[VS_UNARY_POUND {[LIT_CHARS "--*="]}]]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('GIT_TEST_CHAIN_LINT', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('GIT_TEST_CHAIN_LINT', {[LIT_CHARS 0]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('trace', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('verbose', {[LIT_CHARS t]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('verbose_log', {[LIT_CHARS t]})]) (Com {[LIT_CHARS shift]}) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "error: unknown test option '"][VarSub 1][LIT_CHARS "'"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub valgrind_only]]}) (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub valgrind]]}) (= scope= flags=0 words=[] bindings=[('valgrind', {[LIT_CHARS memcheck]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub verbose]]}) (= scope= flags=0 words=[] bindings=[('verbose_only', {[DQ [VarSub valgrind_only]]})]) ) ) (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub valgrind]]}) (= scope= flags=0 words=[] bindings=[('verbose', {[LIT_CHARS t]})]) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub color]]}) (List (= scope= flags=0 words=[] bindings=[('say_color_error', {[ComSub (List (Com {[LIT_CHARS tput]} {[LIT_CHARS bold]}) (Com {[LIT_CHARS tput]} {[LIT_CHARS setaf]} {[LIT_CHARS 1]}) )]})]) (= scope= flags=0 words=[] bindings=[('say_color_skip', {[ComSub (Com {[LIT_CHARS tput]} {[LIT_CHARS setaf]} {[LIT_CHARS 4]})]})]) (= scope= flags=0 words=[] bindings=[('say_color_warn', {[ComSub (Com {[LIT_CHARS tput]} {[LIT_CHARS setaf]} {[LIT_CHARS 3]})]})]) (= scope= flags=0 words=[] bindings=[('say_color_pass', {[ComSub (Com {[LIT_CHARS tput]} {[LIT_CHARS setaf]} {[LIT_CHARS 2]})]})]) (= scope= flags=0 words=[] bindings=[('say_color_info', {[ComSub (Com {[LIT_CHARS tput]} {[LIT_CHARS setaf]} {[LIT_CHARS 6]})]})]) (= scope= flags=0 words=[] bindings=[('say_color_reset', {[ComSub (Com {[LIT_CHARS tput]} {[LIT_CHARS sgr0]})]})]) (= scope= flags=0 words=[] bindings=[('say_color_', {[DQ ]})]) (FunctionDef say_color [] (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub 1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub quiet]]}) (Com {[LIT_CHARS return]}) ) ) (Com {[LIT_CHARS eval]} {[DQ [LIT_CHARS "say_color_color="][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS say_color_][VarSub 1]]}) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%s"][\ LIT_ESCAPED_CHAR "\\\\"][LIT_CHARS n]]} {[DQ [VarSub say_color_color][VarSub *][VarSub say_color_reset]]}) ) ) ) (ElseTrue) (FunctionDef say_color [] (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub 1]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub quiet]]}) (Com {[LIT_CHARS return]}) ) ) (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub *]]}) ) ) ) (= scope= flags=0 words=[] bindings=[('TERM', {[LIT_CHARS dumb]})]) (= scope= flags=1 words=[{[LIT_CHARS TERM]}] bindings=[]) (FunctionDef error [] (List (Com {[LIT_CHARS say_color]} {[LIT_CHARS error]} {[DQ [LIT_CHARS "error: "][VarSub *]]}) (= scope= flags=0 words=[] bindings=[('GIT_EXIT_OK', {[LIT_CHARS t]})]) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (FunctionDef say [] (Com {[LIT_CHARS say_color]} {[LIT_CHARS info]} {[DQ [VarSub *]]}) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub HARNESS_ACTIVE]]}) (If (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub verbose]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub verbose_only]]}) ) (List (Com {[LIT_CHARS printf]} {[SQ ]} {[SQ ]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub test_description]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ ]}) (Com {[LIT_CHARS error]} {[DQ [LIT_CHARS "Test script did not set test_description."]]}) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub help]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS t]]}) (List (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub test_description]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 5), > ) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 0]} 6), > ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub verbose_log]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS t]]}) (Com {[LIT_CHARS exec]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_TEST_TEE_OUTPUT_FILE]]} >"> 3), (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 4), > ) (Com {[LIT_CHARS test]} {[DQ [VarSub verbose]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS t]]}) (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 4), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 3), > ) (ElseTrue) (Com {[LIT_CHARS exec]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 4), (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 3), > ) ) (= scope= flags=0 words=[] bindings=[('BASH_XTRACEFD', {[LIT_CHARS 4]})]) (= scope= flags=0 words=[] bindings=[('test_failure', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('test_count', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('test_fixed', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('test_broken', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('test_success', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('test_external_has_tap', {[LIT_CHARS 0]})]) (FunctionDef die [] (List (= scope= flags=0 words=[] bindings=[('code', {[VarSub ?]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub GIT_EXIT_OK]]}) (Com {[LIT_CHARS exit]} {[VarSub code]}) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "FATAL: Unexpected exit with code "][VarSub code]]} < (DescriptorRedirectNode target={[LIT_CHARS 5]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) ) (= scope= flags=0 words=[] bindings=[('GIT_EXIT_OK', {[SQ ]})]) (Com {[LIT_CHARS trap]} {[SQ ]} {[LIT_CHARS EXIT]}) (Com {[LIT_CHARS trap]} {[SQ ]} {[LIT_CHARS INT]}) (Com {[LIT_CHARS .]} {[DQ [VarSub TEST_DIRECTORY][LIT_CHARS /test-lib-functions.sh]]}) (FunctionDef test_ok_ [] (List (= scope= flags=0 words=[] bindings=[('test_success', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub test_success]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (Com {[LIT_CHARS say_color]} {[DQ ]} {[DQ [LIT_CHARS "ok "][VarSub test_count][LIT_CHARS " - "][VarSub @]]}) ) ) (FunctionDef test_failure_ [] (List (= scope= flags=0 words=[] bindings=[('test_failure', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub test_failure]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (Com {[LIT_CHARS say_color]} {[LIT_CHARS error]} {[DQ [LIT_CHARS "not ok "][VarSub test_count][LIT_CHARS " - "][VarSub 1]]}) (Com {[LIT_CHARS shift]}) (Pipeline (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub *]]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub immediate]]} {[LIT_OTHER "="]} {[DQ ]}) (List (= scope= flags=0 words=[] bindings=[('GIT_EXIT_OK', {[LIT_CHARS t]})]) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) ) (FunctionDef test_known_broken_ok_ [] (List (= scope= flags=0 words=[] bindings=[('test_fixed', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub test_fixed]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (Com {[LIT_CHARS say_color]} {[LIT_CHARS error]} {[DQ [LIT_CHARS "ok "][VarSub test_count][LIT_CHARS " - "][VarSub @][LIT_CHARS " # TODO known breakage vanished"]]}) ) ) (FunctionDef test_known_broken_failure_ [] (List (= scope= flags=0 words=[] bindings=[('test_broken', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub test_broken]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (Com {[LIT_CHARS say_color]} {[LIT_CHARS warn]} {[DQ [LIT_CHARS "not ok "][VarSub test_count][LIT_CHARS " - "][VarSub @][LIT_CHARS " # TODO known breakage"]]}) ) ) (FunctionDef test_debug [] (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub debug]]} {[LIT_OTHER "="]} {[DQ ]}) (Com {[LIT_CHARS eval]} {[DQ [VarSub 1]]}) ) ) (FunctionDef match_pattern_list [] (List (= scope= flags=0 words=[] bindings=[('arg', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub *]]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (For pattern_ do_arg_iter) (Case to_match={[DQ [VarSub arg]]}, pat_word_list=[[{[VarSub pattern_]}]] (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) (FunctionDef match_test_selector_list [] (List (= scope= flags=0 words=[] bindings=[('title', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('arg', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub 1]]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (= scope= flags=0 words=[] bindings=[('OLDIFS', {[VarSub IFS]})]) (= scope= flags=0 words=[] bindings=[('IFS', {[SQ ]})]) (Com {[LIT_CHARS set]} {[LIT_CHARS --]} {[VarSub 1]}) (= scope= flags=0 words=[] bindings=[('IFS', {[VarSub OLDIFS]})]) (= scope= flags=0 words=[] bindings=[('include', {[SQ ]})]) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_OTHER "!"] [LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('include', {[LIT_CHARS t]})]) ) (For selector do_arg_iter) (List (= scope= flags=0 words=[] bindings=[('orig_selector', {[VarSub selector]})]) (= scope= flags=0 words=[] bindings=[('positive', {[LIT_CHARS t]})]) (Case to_match={[DQ [VarSub selector]]}, pat_word_list=[[{[LIT_OTHER "!"] [LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('positive', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('selector', {[VarSub selector transform_ops=[VS_UNARY_DPOUND {[LIT_CHARS "?"]}]]})]) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub selector]]}) (Com {[LIT_CHARS continue]}) ) (Case to_match={[DQ [VarSub selector]]}, pat_word_list=[[{[LIT_OTHER "*"] [LIT_CHARS -] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (If (Com {[LIT_CHARS expr]} {[DQ [LIT_CHARS z][VarSub selector transform_ops=[VS_UNARY_DPERCENT {[LIT_CHARS "-*"]}]]]} {[LIT_OTHER ":"]} {[DQ [LIT_CHARS "z[0-9]*[^0-9]"]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "error: "][VarSub title][LIT_CHARS ": invalid non-numeric in range"]]} {[DQ [LIT_CHARS "start: '"][VarSub orig_selector][LIT_CHARS "'"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (If (Com {[LIT_CHARS expr]} {[DQ [LIT_CHARS z][VarSub selector transform_ops=[VS_UNARY_POUND {[LIT_CHARS "*-"]}]]]} {[LIT_OTHER ":"]} {[DQ [LIT_CHARS "z[0-9]*[^0-9]"]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "error: "][VarSub title][LIT_CHARS ": invalid non-numeric in range"]]} {[DQ [LIT_CHARS "end: '"][VarSub orig_selector][LIT_CHARS "'"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) (If (Com {[LIT_CHARS expr]} {[DQ [LIT_CHARS z][VarSub selector]]} {[LIT_OTHER ":"]} {[DQ [LIT_CHARS "z[0-9]*[^0-9]"]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "error: "][VarSub title][LIT_CHARS ": invalid non-numeric in test"]]} {[DQ [LIT_CHARS "selector: '"][VarSub orig_selector][LIT_CHARS "'"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub include]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub positive]]}) (Com {[LIT_CHARS continue]}) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub include]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub positive]]}) (Com {[LIT_CHARS continue]}) ) ) (Case to_match={[DQ [VarSub selector]]}, pat_word_list=[[{[LIT_CHARS -] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"] [LIT_CHARS -]}], [{[LIT_OTHER "*"] [LIT_CHARS -] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (If (Com {[LIT_CHARS test]} {[VarSub arg]} {[LIT_CHARS -le]} {[VarSub selector transform_ops=[VS_UNARY_POUND {[LIT_CHARS -]}]]}) (= scope= flags=0 words=[] bindings=[('include', {[VarSub positive]})]) ) (If (Com {[LIT_CHARS test]} {[VarSub arg]} {[LIT_CHARS -ge]} {[VarSub selector transform_ops=[VS_UNARY_PERCENT {[LIT_CHARS -]}]]}) (= scope= flags=0 words=[] bindings=[('include', {[VarSub positive]})]) ) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[VarSub selector transform_ops=[VS_UNARY_DPERCENT {[LIT_CHARS "-*"]}]]} {[LIT_CHARS -le]} {[VarSub arg]}) (Com {[LIT_CHARS test]} {[VarSub arg]} {[LIT_CHARS -le]} {[VarSub selector transform_ops=[VS_UNARY_POUND {[LIT_CHARS "*-"]}]]}) ) (= scope= flags=0 words=[] bindings=[('include', {[VarSub positive]})]) ) (If (Com {[LIT_CHARS test]} {[VarSub arg]} {[LIT_CHARS -eq]} {[VarSub selector]}) (= scope= flags=0 words=[] bindings=[('include', {[VarSub positive]})]) ) ) ) ) (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub include]]}) ) ) (FunctionDef maybe_teardown_verbose [] (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub verbose_only]]}) (Com {[LIT_CHARS return]}) ) (Com {[LIT_CHARS exec]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 4), (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 3), > ) (= scope= flags=0 words=[] bindings=[('verbose', {[SQ ]})]) ) ) (= scope= flags=0 words=[] bindings=[('last_verbose', {[LIT_CHARS t]})]) (FunctionDef maybe_setup_verbose [] (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub verbose_only]]}) (Com {[LIT_CHARS return]}) ) (If (Com {[LIT_CHARS match_pattern_list]} {[VarSub test_count]} {[VarSub verbose_only]}) (List (Com {[LIT_CHARS exec]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 4), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 3), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub last_verbose]]}) (Com {[LIT_CHARS echo]} {[DQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), > ) ) (= scope= flags=0 words=[] bindings=[('verbose', {[LIT_CHARS t]})]) ) (ElseTrue) (List (Com {[LIT_CHARS exec]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 4), (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 3), > ) (= scope= flags=0 words=[] bindings=[('verbose', {[SQ ]})]) ) ) (= scope= flags=0 words=[] bindings=[('last_verbose', {[VarSub verbose]})]) ) ) (FunctionDef maybe_teardown_valgrind [] (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub GIT_VALGRIND]]}) (Com {[LIT_CHARS return]}) ) (= scope= flags=0 words=[] bindings=[('GIT_VALGRIND_ENABLED', {[SQ ]})]) ) ) (FunctionDef maybe_setup_valgrind [] (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub GIT_VALGRIND]]}) (Com {[LIT_CHARS return]}) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub valgrind_only]]}) (List (= scope= flags=0 words=[] bindings=[('GIT_VALGRIND_ENABLED', {[LIT_CHARS t]})]) (Com {[LIT_CHARS return]}) ) ) (= scope= flags=0 words=[] bindings=[('GIT_VALGRIND_ENABLED', {[SQ ]})]) (If (Com {[LIT_CHARS match_pattern_list]} {[VarSub test_count]} {[VarSub valgrind_only]}) (= scope= flags=0 words=[] bindings=[('GIT_VALGRIND_ENABLED', {[LIT_CHARS t]})]) ) ) ) (FunctionDef want_trace [] (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [VarSub trace]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS test]} {[DQ [VarSub verbose]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) ) ) (FunctionDef test_eval_inner_ [] (Com {[LIT_CHARS eval]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "\t\twant_trace && set -x\n"][LIT_CHARS "\t\t"][VarSub *]]}) ) (FunctionDef test_eval_ [] (List (List redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)] (Com {[LIT_CHARS test_eval_inner_]} {[DQ [VarSub @]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} 0), (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), (DescriptorRedirectNode target={[LIT_CHARS 4]} &"> 2), > ) (= scope= flags=0 words=[] bindings=[('test_eval_ret_', {[VarSub ?]})]) (If (Com {[LIT_CHARS want_trace]}) (List (Com {[LIT_CHARS set]} {[LIT_OTHER "+"] [LIT_CHARS x]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub test_eval_ret_]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS say_color]} {[LIT_CHARS error]} {[DQ [LIT_CHARS "error: last command exited with "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "?="][VarSub test_eval_ret_]]} < (DescriptorRedirectNode target={[LIT_CHARS 4]} &"> 1), > ) ) ) ) ) (Com {[LIT_CHARS return]} {[VarSub test_eval_ret_]}) ) ) (FunctionDef test_run_ [] (List (= scope= flags=0 words=[] bindings=[('test_cleanup', {[LIT_OTHER ":"]})]) (= scope= flags=0 words=[] bindings=[('expecting_failure', {[VarSub 2]})]) (If (Com {[LIT_CHARS test]} {[DQ [VarSub GIT_TEST_CHAIN_LINT test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS 1]}]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) (List (= scope= flags=0 words=[] bindings=[('trace_tmp', {[VarSub trace]})]) (= scope= flags=0 words=[] bindings=[('trace', {[SQ ]})]) (Com {[LIT_CHARS test_eval_]} {[DQ [LIT_CHARS "(exit 117) && "][VarSub 1]]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub ?]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 117]}) (Com {[LIT_CHARS error]} {[DQ [LIT_CHARS "bug in the test script: broken &&-chain: "][VarSub 1]]}) ) (= scope= flags=0 words=[] bindings=[('trace', {[VarSub trace_tmp]})]) ) ) (Com {[LIT_CHARS setup_malloc_check]}) (Com {[LIT_CHARS test_eval_]} {[DQ [VarSub 1]]}) (= scope= flags=0 words=[] bindings=[('eval_ret', {[VarSub ?]})]) (Com {[LIT_CHARS teardown_malloc_check]}) (If (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub immediate]]}) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[VarSub eval_ret]} {[LIT_OTHER "="]} {[LIT_CHARS 0]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub expecting_failure]]}) (Com {[LIT_CHARS test]} {[DQ [VarSub test_cleanup]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [LIT_CHARS ":"]]}) ) ) ) (List (Com {[LIT_CHARS setup_malloc_check]}) (Com {[LIT_CHARS test_eval_]} {[DQ [VarSub test_cleanup]]}) (Com {[LIT_CHARS teardown_malloc_check]}) ) ) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [VarSub verbose]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS t]]}) (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub HARNESS_ACTIVE]]}) ) (Com {[LIT_CHARS echo]} {[DQ ]}) ) (Com {[LIT_CHARS return]} {[DQ [VarSub eval_ret]]}) ) ) (FunctionDef test_start_ [] (List (= scope= flags=0 words=[] bindings=[('test_count', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub test_count]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (Com {[LIT_CHARS maybe_setup_verbose]}) (Com {[LIT_CHARS maybe_setup_valgrind]}) ) ) (FunctionDef test_finish_ [] (List (Com {[LIT_CHARS echo]} {[DQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), > ) (Com {[LIT_CHARS maybe_teardown_valgrind]}) (Com {[LIT_CHARS maybe_teardown_verbose]}) ) ) (FunctionDef test_skip [] (List (= scope= flags=0 words=[] bindings=[('to_skip', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('skipped_reason', {[SQ ]})]) (If (Com {[LIT_CHARS match_pattern_list]} {[VarSub this_test] [LIT_CHARS .] [VarSub test_count]} {[VarSub GIT_SKIP_TESTS]}) (List (= scope= flags=0 words=[] bindings=[('to_skip', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('skipped_reason', {[DQ [LIT_CHARS GIT_SKIP_TESTS]]})]) ) ) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub to_skip]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub test_prereq]]}) (Pipeline! (Com {[LIT_CHARS test_have_prereq]} {[DQ [VarSub test_prereq]]}) ) ) ) (List (= scope= flags=0 words=[] bindings=[('to_skip', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('of_prereq', {[SQ ]})]) (If (Com {[LIT_CHARS test]} {[DQ [VarSub missing_prereq]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [VarSub test_prereq]]}) (= scope= flags=0 words=[] bindings=[('of_prereq', {[DQ [LIT_CHARS " of "][VarSub test_prereq]]})]) ) (= scope= flags=0 words=[] bindings=[('skipped_reason', {[DQ [LIT_CHARS "missing "][VarSub missing_prereq][VarSub of_prereq]]})]) ) ) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub to_skip]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub run_list]]}) (Pipeline! (Com {[LIT_CHARS match_test_selector_list]} {[SQ ]} {[VarSub test_count]} {[DQ [VarSub run_list]]}) ) ) ) (List (= scope= flags=0 words=[] bindings=[('to_skip', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('skipped_reason', {[DQ [LIT_CHARS --run]]})]) ) ) (Case to_match={[DQ [VarSub to_skip]]}, pat_word_list=[[{[LIT_CHARS t]}], [{[LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS say_color]} {[LIT_CHARS skip]} {[DQ [LIT_CHARS "skipping test: "][VarSub @]]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), > ) (Com {[LIT_CHARS say_color]} {[LIT_CHARS skip]} {[DQ [LIT_CHARS "ok "][VarSub test_count][LIT_CHARS " # skip "][VarSub 1][LIT_CHARS " ("][VarSub skipped_reason][LIT_CHARS ")"]]}) (Com {[LIT_OTHER ":"]} {[LIT_CHARS true]}) ) (Com {[LIT_CHARS false]}) ) ) ) (FunctionDef test_at_end_hook_ [] (Com {[LIT_OTHER ":"]}) ) (FunctionDef test_done [] (List (= scope= flags=0 words=[] bindings=[('GIT_EXIT_OK', {[LIT_CHARS t]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub HARNESS_ACTIVE]]}) (List (= scope= flags=0 words=[] bindings=[('test_results_dir', {[DQ [VarSub TEST_OUTPUT_DIRECTORY][LIT_CHARS /test-results]]})]) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub test_results_dir]]}) (= scope= flags=0 words=[] bindings=[('base', {[VarSub 0 transform_ops=[VS_UNARY_DPOUND {[LIT_CHARS "*"] [LIT_SLASH /]}]]})]) (= scope= flags=0 words=[] bindings=[('test_results_path', {[DQ [VarSub test_results_dir][LIT_CHARS /][VarSub base transform_ops=[VS_UNARY_PERCENT {[LIT_CHARS .sh]}]][LIT_CHARS .counts]]})]) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub test_results_path]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "total "][VarSub test_count][LIT_CHARS "\n"][LIT_CHARS "success "][VarSub test_success][LIT_CHARS "\n"][LIT_CHARS "fixed "][VarSub test_fixed][LIT_CHARS "\n"][LIT_CHARS "broken "][VarSub test_broken][LIT_CHARS "\n"][LIT_CHARS "failed "][VarSub test_failure][LIT_CHARS "\n"][LIT_CHARS "\n"]]} 0), > ) ) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub test_fixed]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS say_color]} {[LIT_CHARS error]} {[DQ [LIT_CHARS "# "][VarSub test_fixed][LIT_CHARS " known breakage(s) vanished; please update test(s)"]]}) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub test_broken]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS say_color]} {[LIT_CHARS warn]} {[DQ [LIT_CHARS "# still have "][VarSub test_broken][LIT_CHARS " known breakage(s)"]]}) ) (If (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub test_broken]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS test]} {[DQ [VarSub test_fixed]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) ) (List (= scope= flags=0 words=[] bindings=[('test_remaining', {[ArithSub {A2 AS_OP_MINUS {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub test_count]}} {A Atom NODE_ARITH_WORD {[VarSub test_broken]}}} {A Atom NODE_ARITH_WORD {[VarSub test_fixed]}}}]})]) (= scope= flags=0 words=[] bindings=[('msg', {[DQ [LIT_CHARS "remaining "][VarSub test_remaining][LIT_CHARS " test(s)"]]})]) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('test_remaining', {[VarSub test_count]})]) (= scope= flags=0 words=[] bindings=[('msg', {[DQ [VarSub test_count][LIT_CHARS " test(s)"]]})]) ) ) (Case to_match={[DQ [VarSub test_failure]]}, pat_word_list=[[{[LIT_CHARS 0]}], [{[LIT_OTHER "*"]}]] (List (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub skip_all]]}) (Com {[LIT_CHARS test]} {[VarSub test_count]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]}) ) (Com {[LIT_CHARS error]} {[DQ [LIT_CHARS "Can't use skip_all after running some tests"]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub skip_all]]}) (= scope= flags=0 words=[] bindings=[('skip_all', {[DQ [LIT_CHARS " # SKIP "][VarSub skip_all]]})]) ) (If (Com {[LIT_CHARS test]} {[VarSub test_external_has_tap]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]}) (List (If (Com {[LIT_CHARS test]} {[VarSub test_remaining]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS say_color]} {[LIT_CHARS pass]} {[DQ [LIT_CHARS "# passed all "][VarSub msg]]}) ) (Com {[LIT_CHARS say]} {[DQ [LIT_CHARS 1..][VarSub test_count][VarSub skip_all]]}) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [VarSub remove_trash]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub remove_trash]]})]]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [ComSub (Com {[LIT_CHARS basename]} {[DQ [VarSub remove_trash]]})]]}) ) ) (Com {[LIT_CHARS test_at_end_hook_]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) (List (If (Com {[LIT_CHARS test]} {[VarSub test_external_has_tap]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]}) (List (Com {[LIT_CHARS say_color]} {[LIT_CHARS error]} {[DQ [LIT_CHARS "# failed "][VarSub test_failure][LIT_CHARS " among "][VarSub msg]]}) (Com {[LIT_CHARS say]} {[DQ [LIT_CHARS 1..][VarSub test_count]]}) ) ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub valgrind]]}) (List (FunctionDef make_symlink [] (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -h]} {[DQ [VarSub 2]]}) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub 1]]} {[LIT_OTHER "="]} {[DQ [ComSub (Com {[LIT_CHARS readlink]} {[DQ [VarSub 2]]})]]}) (If (Com {[LIT_CHARS mkdir]} {[DQ [VarSub 2]] [LIT_CHARS .lock]}) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub 2]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS ln]} {[LIT_CHARS -s]} {[DQ [VarSub 1]]} {[DQ [VarSub 2]]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS -r]} {[DQ [VarSub 2]] [LIT_CHARS .lock]}) ) ) (ElseTrue) (While (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [VarSub 2]] [LIT_CHARS .lock]}) (List (Com {[LIT_CHARS say]} {[DQ [LIT_CHARS "Waiting for lock on "][VarSub 2][LIT_CHARS .]]}) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]}) ) ) ) ) ) ) (FunctionDef make_valgrind_symlink [] (List (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -x]} {[DQ [VarSub 1]]}) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [LIT_CHARS "# "]]} {[LIT_OTHER "="]} {[DQ [ComSub (Com redirects=[(FilenameRedirectNode filename={[DQ [VarSub 1]]} 0)]{[LIT_CHARS head]} {[LIT_CHARS -c]} {[LIT_CHARS 2]})]]}) (Com {[LIT_CHARS return]}) ) ) (= scope= flags=0 words=[] bindings=[('base', {[ComSub (Com {[LIT_CHARS basename]} {[DQ [VarSub 1]]})]})]) (= scope= flags=0 words=[] bindings=[('symlink_target', {[VarSub GIT_BUILD_DIR] [LIT_CHARS /] [VarSub base]})]) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -x]} {[DQ [VarSub symlink_target]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_OTHER "!"]} {[LIT_CHARS -d]} {[DQ [VarSub symlink_target]]}) (Com {[LIT_CHARS test]} {[DQ [LIT_CHARS "#!"]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [ComSub (Com redirects=[(FilenameRedirectNode filename={[DQ [VarSub symlink_target]]} 0)]{[LIT_CHARS head]} {[LIT_CHARS -c]} {[LIT_CHARS 2]})]]}) ) ) (= scope= flags=0 words=[] bindings=[('symlink_target', {[LIT_CHARS ../valgrind.sh]})]) ) (Case to_match={[DQ [VarSub base]]}, pat_word_list=[[{[LIT_OTHER "*"] [LIT_CHARS .sh]}, {[LIT_OTHER "*"] [LIT_CHARS .perl]}]] (= scope= flags=0 words=[] bindings=[('symlink_target', {[LIT_CHARS ../unprocessed-script]})]) ) (AndOr OP_OR_IF (Com {[LIT_CHARS make_symlink]} {[DQ [VarSub symlink_target]]} {[DQ [VarSub GIT_VALGRIND][LIT_CHARS /bin/][VarSub base]]}) (Com {[LIT_CHARS exit]}) ) ) ) (= scope= flags=0 words=[] bindings=[('GIT_VALGRIND', {[VarSub TEST_DIRECTORY] [LIT_CHARS /valgrind]})]) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub GIT_VALGRIND]] [LIT_CHARS /bin]}) (For file [{[VarSub GIT_BUILD_DIR] [LIT_CHARS /git] [LIT_OTHER "*"]}, {[VarSub GIT_BUILD_DIR] [LIT_CHARS /t/helper/test-] [LIT_OTHER "*"]}]) (Com {[LIT_CHARS make_valgrind_symlink]} {[VarSub file]}) ) (Com {[LIT_CHARS make_symlink]} {[DQ [VarSub GIT_BUILD_DIR]] [LIT_CHARS /mergetools]} {[DQ [VarSub GIT_VALGRIND][LIT_CHARS /bin/mergetools]]}) (= scope= flags=0 words=[] bindings=[('OLDIFS', {[VarSub IFS]})]) (= scope= flags=0 words=[] bindings=[('IFS', {[LIT_OTHER ":"]})]) (For path [{[VarSub PATH]}]) (Pipeline (Com {[LIT_CHARS ls]} {[DQ [VarSub path]] [LIT_CHARS /git-] [LIT_OTHER "*"]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (While (Com {[LIT_CHARS read]} {[LIT_CHARS file]}) (Com {[LIT_CHARS make_valgrind_symlink]} {[DQ [VarSub file]]}) ) ) ) (= scope= flags=0 words=[] bindings=[('IFS', {[VarSub OLDIFS]})]) (= scope= flags=0 words=[] bindings=[('PATH', {[VarSub GIT_VALGRIND] [LIT_CHARS /bin] [LIT_OTHER ":"] [VarSub PATH]})]) (= scope= flags=0 words=[] bindings=[('GIT_EXEC_PATH', {[VarSub GIT_VALGRIND] [LIT_CHARS /bin]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_VALGRIND]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('GIT_VALGRIND_MODE', {[DQ [VarSub valgrind]]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_VALGRIND_MODE]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('GIT_VALGRIND_ENABLED', {[LIT_CHARS t]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub valgrind_only]]}) (= scope= flags=0 words=[] bindings=[('GIT_VALGRIND_ENABLED', {[SQ ]})]) ) (= scope= flags=1 words=[{[LIT_CHARS GIT_VALGRIND_ENABLED]}] bindings=[]) ) (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub GIT_TEST_INSTALLED]]}) (List (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('GIT_EXEC_PATH', {[ComSub (Com {[VarSub GIT_TEST_INSTALLED] [LIT_CHARS /git]} {[LIT_CHARS --exec-path]})]})]) (Com {[LIT_CHARS error]} {[DQ [LIT_CHARS "Cannot run git from "][VarSub GIT_TEST_INSTALLED][LIT_CHARS .]]}) ) (= scope= flags=0 words=[] bindings=[('PATH', {[VarSub GIT_TEST_INSTALLED] [LIT_OTHER ":"] [VarSub GIT_BUILD_DIR] [LIT_OTHER ":"] [VarSub PATH]})]) (= scope= flags=0 words=[] bindings=[('GIT_EXEC_PATH', {[VarSub GIT_TEST_EXEC_PATH test_op=VS_TEST_COLON_HYPHEN {[VarSub GIT_EXEC_PATH]}]})]) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('git_bin_dir', {[DQ [VarSub GIT_BUILD_DIR][LIT_CHARS /bin-wrappers]]})]) (If (Pipeline! (Com {[LIT_CHARS test]} {[LIT_CHARS -x]} {[DQ [VarSub git_bin_dir][LIT_CHARS /git]]}) ) (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub with_dashes]]}) (Com {[LIT_CHARS say]} {[DQ [VarSub git_bin_dir][LIT_CHARS "/git is not executable; using GIT_EXEC_PATH"]]}) ) (= scope= flags=0 words=[] bindings=[('with_dashes', {[LIT_CHARS t]})]) ) ) (= scope= flags=0 words=[] bindings=[('PATH', {[DQ [VarSub git_bin_dir][LIT_CHARS ":"][VarSub PATH]]})]) (= scope= flags=0 words=[] bindings=[('GIT_EXEC_PATH', {[VarSub GIT_BUILD_DIR]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub with_dashes]]}) (= scope= flags=0 words=[] bindings=[('PATH', {[DQ [VarSub GIT_BUILD_DIR][LIT_CHARS ":"][VarSub PATH]]})]) ) ) ) (= scope= flags=0 words=[] bindings=[('GIT_TEMPLATE_DIR', {[DQ [VarSub GIT_BUILD_DIR]] [LIT_CHARS /templates/blt]})]) (= scope= flags=0 words=[] bindings=[('GIT_CONFIG_NOSYSTEM', {[LIT_CHARS 1]})]) (= scope= flags=0 words=[] bindings=[('GIT_ATTR_NOSYSTEM', {[LIT_CHARS 1]})]) (= scope= flags=1 words=[{[LIT_CHARS PATH]}, {[LIT_CHARS GIT_EXEC_PATH]}, {[LIT_CHARS GIT_TEMPLATE_DIR]}, {[LIT_CHARS GIT_CONFIG_NOSYSTEM]}, {[LIT_CHARS GIT_ATTR_NOSYSTEM]}] bindings=[]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub GIT_TEST_CMP]]}) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub GIT_TEST_CMP_USE_COPIED_CONTEXT]]}) (= scope= flags=0 words=[] bindings=[('GIT_TEST_CMP', {[DQ [VarSub DIFF][LIT_CHARS " -c"]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('GIT_TEST_CMP', {[DQ [VarSub DIFF][LIT_CHARS " -u"]]})]) ) ) (= scope= flags=0 words=[] bindings=[('GITPERLLIB', {[DQ [VarSub GIT_BUILD_DIR]] [LIT_CHARS /perl/blib/lib] [LIT_OTHER ":"] [DQ [VarSub GIT_BUILD_DIR]] [LIT_CHARS /perl/blib/arch/auto/Git]})]) (= scope= flags=1 words=[{[LIT_CHARS GITPERLLIB]}] bindings=[]) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [VarSub GIT_BUILD_DIR]] [LIT_CHARS /templates/blt]}) (Com {[LIT_CHARS error]} {[DQ [LIT_CHARS "You haven't built things yet, have you?"]]}) ) (If (Pipeline! (Com {[LIT_CHARS test]} {[LIT_CHARS -x]} {[DQ [VarSub GIT_BUILD_DIR]] [LIT_CHARS /t/helper/test-chmtime]}) ) (List (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=0 words=[] bindings=[('TRASH_DIRECTORY', {[DQ [LIT_CHARS "trash directory."][ComSub (Com {[LIT_CHARS basename]} {[DQ [VarSub 0]]} {[LIT_CHARS .sh]})]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub root]]}) (= scope= flags=0 words=[] bindings=[('TRASH_DIRECTORY', {[DQ [VarSub root][LIT_CHARS /][VarSub TRASH_DIRECTORY]]})]) ) (Case to_match={[DQ [VarSub TRASH_DIRECTORY]]}, pat_word_list=[[{[LIT_CHARS /] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (ElseTrue) (= scope= flags=0 words=[] bindings=[('TRASH_DIRECTORY', {[DQ [VarSub TEST_OUTPUT_DIRECTORY][LIT_CHARS /][VarSub TRASH_DIRECTORY]]})]) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub debug]]}) (= scope= flags=0 words=[] bindings=[('remove_trash', {[VarSub TRASH_DIRECTORY]})]) ) (AndOr OP_OR_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -fr]} {[DQ [VarSub TRASH_DIRECTORY]]}) (List (= scope= flags=0 words=[] bindings=[('GIT_EXIT_OK', {[LIT_CHARS t]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "FATAL: Cannot prepare test area"]]} < (DescriptorRedirectNode target={[LIT_CHARS 5]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=0 words=[] bindings=[('HOME', {[DQ [VarSub TRASH_DIRECTORY]]})]) (= scope= flags=0 words=[] bindings=[('GNUPGHOME', {[DQ [VarSub HOME][LIT_CHARS /gnupg-home-not-used]]})]) (= scope= flags=1 words=[{[LIT_CHARS HOME]}, {[LIT_CHARS GNUPGHOME]}] bindings=[]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub TEST_NO_CREATE_REPO]]}) (Com {[LIT_CHARS test_create_repo]} {[DQ [VarSub TRASH_DIRECTORY]]}) (ElseTrue) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub TRASH_DIRECTORY]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS cd]} {[LIT_CHARS -P]} {[DQ [VarSub TRASH_DIRECTORY]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) (= scope= flags=0 words=[] bindings=[('this_test', {[VarSub 0 transform_ops=[VS_UNARY_DPOUND {[LIT_CHARS "*"] [LIT_SLASH /]}]]})]) (= scope= flags=0 words=[] bindings=[('this_test', {[VarSub this_test transform_ops=[VS_UNARY_DPERCENT {[LIT_CHARS "-*"]}]]})]) (If (Com {[LIT_CHARS match_pattern_list]} {[DQ [VarSub this_test]]} {[VarSub GIT_SKIP_TESTS]}) (List (Com {[LIT_CHARS say_color]} {[LIT_CHARS info]} {[DQ [LIT_CHARS "skipping test "][VarSub this_test][LIT_CHARS " altogether"]]} < (DescriptorRedirectNode target={[LIT_CHARS 3]} &"> 1), > ) (= scope= flags=0 words=[] bindings=[('skip_all', {[DQ [LIT_CHARS "skip all tests in "][VarSub this_test]]})]) (Com {[LIT_CHARS test_done]}) ) ) (FunctionDef yes [] (List (If (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_OTHER "="]} {[LIT_CHARS 0]}) (= scope= flags=0 words=[] bindings=[('y', {[LIT_CHARS y]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('y', {[DQ [VarSub *]]})]) ) (= scope= flags=0 words=[] bindings=[('i', {[LIT_CHARS 0]})]) (While (Com {[LIT_CHARS test]} {[VarSub i]} {[LIT_CHARS -lt]} {[LIT_CHARS 99]}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub y]]}) (= scope= flags=0 words=[] bindings=[('i', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub i]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) ) ) ) ) (Case to_match={[ComSub (Com {[LIT_CHARS uname]} {[LIT_CHARS -s]})]}, pat_word_list=[[{[LIT_OTHER "*"] [LIT_CHARS MINGW] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"] [LIT_CHARS CYGWIN] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (FunctionDef sort [] (Com {[LIT_CHARS /usr/bin/sort]} {[DQ [VarSub @]]}) ) (FunctionDef find [] (Com {[LIT_CHARS /usr/bin/find]} {[DQ [VarSub @]]}) ) (FunctionDef sum [] (Com {[LIT_CHARS md5sum]} {[DQ [VarSub @]]}) ) (FunctionDef pwd [] (Com {[LIT_CHARS builtin]} {[LIT_CHARS pwd]} {[LIT_CHARS -W]}) ) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS MINGW]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS NATIVE_CRLF]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS SED_STRIPS_CR]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS GREP_STRIPS_CR]}) (= scope= flags=0 words=[] bindings=[('GIT_TEST_CMP', {[LIT_CHARS mingw_test_cmp]})]) ) (List (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS POSIXPERM]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS EXECKEEPSPID]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS CYGWIN]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS SED_STRIPS_CR]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS GREP_STRIPS_CR]}) ) (List (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS POSIXPERM]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS BSLASHPSPEC]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS EXECKEEPSPID]}) ) ) (AndOr OP_AND_IF (Subshell (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('COLUMNS', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS test]} {[VarSub COLUMNS]} {[LIT_OTHER "="]} {[LIT_CHARS 1]}) ) ) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS COLUMNS_CAN_BE_1]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub NO_PERL]]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS PERL]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub NO_PYTHON]]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS PYTHON]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub USE_LIBPCRE]]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS LIBPCRE]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub NO_GETTEXT]]}) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS GETTEXT]}) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub GETTEXT_POISON]]}) (List (= scope= flags=0 words=[] bindings=[('GIT_GETTEXT_POISON', {[LIT_CHARS YesPlease]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_GETTEXT_POISON]}] bindings=[]) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS GETTEXT_POISON]}) ) (ElseTrue) (Com {[LIT_CHARS test_set_prereq]} {[LIT_CHARS C_LOCALE_OUTPUT]}) ) (FunctionDef test_i18ncmp [] (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub GETTEXT_POISON]]}) (Com {[LIT_CHARS test_cmp]} {[DQ [VarSub @]]}) ) ) (FunctionDef test_i18ngrep [] (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub GETTEXT_POISON]]}) (Com {[LIT_OTHER ":"]}) (Com {[LIT_CHARS test]} {[DQ [LIT_CHARS "x!"]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS x][VarSub 1]]}) (List (Com {[LIT_CHARS shift]}) (Pipeline! (Com {[LIT_CHARS grep]} {[DQ [VarSub @]]}) ) ) (ElseTrue) (Com {[LIT_CHARS grep]} {[DQ [VarSub @]]}) ) ) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS PIPE]} {[SQ ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS SYMLINKS]} {[SQ ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS FILEMODE]} {[SQ ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS CASE_INSENSITIVE_FS]} {[SQ CamelCase &&\n"> camelcase &&\n"> ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS UTF8_NFD_TO_NFC]} {[SQ \"$auml\" &&\n"> ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS AUTOIDENT]} {[SQ ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS EXPENSIVE]} {[SQ ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS USR_BIN_TIME]} {[SQ ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS NOT_ROOT]} {[SQ ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS JGIT]} {[SQ ]}) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS SANITY]} {[SQ SANETESTD.1/x 2>SANETESTD.2/x &&\n"> ]}) (= scope= flags=0 words=[] bindings=[('GIT_UNZIP', {[VarSub GIT_UNZIP test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS unzip]}]})]) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS UNZIP]} {[SQ ]}) (FunctionDef run_with_limited_cmdline [] (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS ulimit]} {[LIT_CHARS -s]} {[LIT_CHARS 128]}) (Com {[DQ [VarSub @]]}) ) ) ) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS CMDLINE_LIMIT]} {[SQ ]}) (FunctionDef build_option [] (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS version]} {[LIT_CHARS --build-options]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -ne]} {[DQ [LIT_CHARS "s/^"][VarSub 1][LIT_CHARS ": //p"]]}) ) ) (Com {[LIT_CHARS test_lazy_prereq]} {[LIT_CHARS LONG_IS_64BIT]} {[SQ ]}) )