(command.CommandList children: [ (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST_DIRECTORY) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:81) command_list: (command.CommandList children:[(C {(pwd)})]) ) } spids: [80] ) ] ) ] spids: [55 65] ) ] else_action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST_DIRECTORY) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:97) command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(cd)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY'))}) (C {(pwd)}) ] ) ] ) ) } spids: [96] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:111) arg_word: {(1)} ) ] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$TEST_OUTPUT_DIRECTORY'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST_OUTPUT_DIRECTORY) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$TEST_DIRECTORY')} spids: [138] ) ] ) ] spids: [117 127] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_BUILD_DIR) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/..)} spids: [143] ) ] ) (command.Simple words: [{(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR') (/git))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:161) fd: -1 arg_word: {(/dev/null)} ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {($ Id.VSub_QMark '$?')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(1)})] action: [ (command.Simple words: [ {(echo)} { (SQ (Token id: Id.Lit_Chars val: 'error: you do not seem to have built git yet.' span_id: 184 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:180) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:188) arg_word: {(1)} ) ] spids: [164 175] ) ] ) (C {(.)} {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR')) (/GIT-BUILD-OPTIONS)}) (C {(export)} {(PERL_PATH)} {(SHELL_PATH)}) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$GIT_TEST_TEE_STARTED') (', ') ($ Id.VSub_Star '$*') (' '))} arms: [ (case_arm pat_list: [{(Id.KW_Done done) (Id.Lit_Comma ',') (Id.Lit_Star '*')}] spids: [226 229 236 -1] ) (case_arm pat_list: [ {(Id.Lit_Star '*') (SQ (Token id:Id.Lit_Chars val:' --tee ' span_id:240)) (Id.Lit_Star '*') } {(Id.Lit_Star '*') (SQ (Token id:Id.Lit_Chars val:' --va' span_id:246)) (Id.Lit_Star '*')} {(Id.Lit_Star '*') (SQ (Token id:Id.Lit_Chars val:' --verbose-log ' span_id:252)) (Id.Lit_Star '*') } ] action: [ (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$TEST_OUTPUT_DIRECTORY') (/test-results))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BASE) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$TEST_OUTPUT_DIRECTORY') (/test-results/) (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:272) command_list: (command.CommandList children: [(C {(basename)} {(DQ ($ Id.VSub_Number '$0'))} {(.sh)})] ) ) ) } spids: [268] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TEST_TEE_OUTPUT_FILE) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$BASE') (.out)} spids: [293] ) ] ) (C {(export)} {(GIT_TEST_TEE_OUTPUT_FILE)}) (command.Simple redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:312) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$GIT_TEST_TEE_OUTPUT_FILE'))} ) ] ) (command.Pipeline children: [ (command.Subshell command_list: (command.CommandList children: [ (command.Sentence child: (command.Simple words: [ {(${ Id.VSub_Name SHELL_PATH)} {(DQ ($ Id.VSub_Number '$0'))} {(DQ ($ Id.VSub_At '$@'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:335) fd: 2 arg_word: {(1)} ) ] more_env: [ (env_pair name: GIT_TEST_TEE_STARTED val: {(Id.KW_Done done)} spids: [320] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:337) ) (command.Simple words: [{(echo)} {($ Id.VSub_QMark '$?')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:344) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$BASE') (.exit))} ) ] ) ] ) ) (C {(tee)} {(-a)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_TEE_OUTPUT_FILE'))}) ] negated: F ) (C {(test)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:365) command_list: (command.CommandList children: [(C {(cat)} {(DQ ($ Id.VSub_DollarName '$BASE') (.exit))})] ) ) ) } {(Id.Lit_Equals '=')} {(0)} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:380) ) ] spids: [238 255 383 -1] ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:LANG) op:assign_op.Equal rhs:{(C)} spids:[394])] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LC_ALL) op: assign_op.Equal rhs: {(C)} spids: [397] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PAGER) op: assign_op.Equal rhs: {(cat)} spids: [400] ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:TZ) op:assign_op.Equal rhs:{(UTC)} spids:[403])] ) (C {(export)} {(LANG)} {(LC_ALL)} {(PAGER)} {(TZ)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:EDITOR) op: assign_op.Equal rhs: {(Id.Lit_Other ':')} spids: [416] ) ] ) (C {(unset)} {(VISUAL)} {(EMAIL)} {(LANGUAGE)} {(COLUMNS)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:441) command_list: (command.CommandList children: [ (C {(DQ ($ Id.VSub_DollarName '$PERL_PATH'))} {(-e)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:449) (Token id: Id.Lit_Chars val: '\tmy @env = keys %ENV;\n' span_id: 450 ) (Token id:Id.Lit_Chars val:'\tmy $ok = join("|", qw(\n' span_id:451) (Token id:Id.Lit_Chars val:'\t\tTRACE\n' span_id:452) (Token id:Id.Lit_Chars val:'\t\tDEBUG\n' span_id:453) (Token id: Id.Lit_Chars val: '\t\tUSE_LOOKUP\n' span_id: 454 ) (Token id:Id.Lit_Chars val:'\t\tTEST\n' span_id:455) (Token id:Id.Lit_Chars val:'\t\t.*_TEST\n' span_id:456) (Token id:Id.Lit_Chars val:'\t\tPROVE\n' span_id:457) (Token id:Id.Lit_Chars val:'\t\tVALGRIND\n' span_id:458) (Token id:Id.Lit_Chars val:'\t\tUNZIP\n' span_id:459) (Token id:Id.Lit_Chars val:'\t\tPERF_\n' span_id:460) (Token id:Id.Lit_Chars val:'\t\tCURL_VERBOSE\n' span_id:461) (Token id: Id.Lit_Chars val: '\t\tTRACE_CURL\n' span_id: 462 ) (Token id:Id.Lit_Chars val:'\t));\n' span_id:463) (Token id: Id.Lit_Chars val: '\tmy @vars = grep(/^GIT_/ && !/^GIT_($ok)/o, @env);\n' span_id: 464 ) (Token id:Id.Lit_Chars val:'\tprint join("\\n", @vars);\n' span_id:465) ) } ) ] ) ) } ) (C {(unset)} {(XDG_CONFIG_HOME)}) (C {(unset)} {(GITPERLLIB)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_AUTHOR_EMAIL) op: assign_op.Equal rhs: {(author) (Id.Lit_Splice '@example') (.com)} spids: [477] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_AUTHOR_NAME) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'A U Thor' span_id:484))} spids: [482] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_EMAIL) op: assign_op.Equal rhs: {(committer) (Id.Lit_Splice '@example') (.com)} spids: [487] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_NAME) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'C O Mitter' span_id:494))} spids: [492] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_MERGE_VERBOSITY) op: assign_op.Equal rhs: {(5)} spids: [497] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_MERGE_AUTOEDIT) op: assign_op.Equal rhs: {(no)} spids: [500] ) ] ) (C {(export)} {(GIT_MERGE_VERBOSITY)} {(GIT_MERGE_AUTOEDIT)}) (C {(export)} {(GIT_AUTHOR_EMAIL)} {(GIT_AUTHOR_NAME)}) (C {(export)} {(GIT_COMMITTER_EMAIL)} {(GIT_COMMITTER_NAME)}) (C {(export)} {(EDITOR)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TRACE_BARE) op: assign_op.Equal rhs: {(1)} spids: [529] ) ] ) (C {(export)} {(GIT_TRACE_BARE)}) (command.If arms: [ (if_arm cond: [ (C {(test)} {(-n)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:TEST_GIT_INDEX_VERSION span_id:545) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonPlus arg_word:{(isset)}) ) ) } ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_INDEX_VERSION) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TEST_GIT_INDEX_VERSION'))} spids: [554] ) ] ) (C {(export)} {(GIT_INDEX_VERSION)}) ] spids: [537 551] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {(expr)} {(DQ (' ') ($ Id.VSub_DollarName '$GIT_TEST_OPTS') (' '))} {(Id.Lit_Other ':')} {(DQ ('.* --valgrind '))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:589) fd: -1 arg_word: {(/dev/null)} ) ] ) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$TEST_NO_MALLOC_CHECK'))}) ] ) ] action: [ (command.ShFunction name: setup_malloc_check body: (command.BraceGroup children:[(C {(Id.Lit_Other ':')} {(nothing)})]) ) (command.ShFunction name: teardown_malloc_check body: (command.BraceGroup children:[(C {(Id.Lit_Other ':')} {(nothing)})]) ) ] spids: [573 603] ) ] else_action: [ (command.ShFunction name: setup_malloc_check body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MALLOC_CHECK_) op: assign_op.Equal rhs: {(3)} spids: [648] ) (assign_pair lhs: (sh_lhs_expr.Name name:MALLOC_PERTURB_) op: assign_op.Equal rhs: {(165)} spids: [651] ) ] ) (C {(export)} {(MALLOC_CHECK_)} {(MALLOC_PERTURB_)}) ] ) ) (command.ShFunction name: teardown_malloc_check body: (command.BraceGroup children:[(C {(unset)} {(MALLOC_CHECK_)} {(MALLOC_PERTURB_)})]) ) ] ) (C {(Id.Lit_Other ':')} { (braced_var_sub token: (Token id:Id.VSub_Name val:ASAN_OPTIONS span_id:688) suffix_op: (suffix_op.Unary op_id:Id.VTest_Equals arg_word:{('detect_leaks=0')}) ) } ) (C {(export)} {(ASAN_OPTIONS)}) (C {(unset)} {(CDPATH)}) (C {(unset)} {(GREP_OPTIONS)}) (C {(unset)} {(UNZIP)}) (command.Case to_match: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:720) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$GIT_TRACE')}) (C {(tr)} {(DQ ('[A-Z]'))} {(DQ ('[a-z]'))}) ] negated: F ) ] ) ) } arms: [ (case_arm pat_list: [{(1)} {(2)} {(true)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TRACE) op: assign_op.Equal rhs: {(4)} spids: [747] ) ] ) ] spids: [739 744 751 -1] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_x05) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' span_id:767))} spids: [765] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_x40) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$_x05') ($ Id.VSub_DollarName '$_x05') ($ Id.VSub_DollarName '$_x05') ($ Id.VSub_DollarName '$_x05') ($ Id.VSub_DollarName '$_x05') ($ Id.VSub_DollarName '$_x05') ($ Id.VSub_DollarName '$_x05') ($ Id.VSub_DollarName '$_x05') ) } spids: [770] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_z40) op: assign_op.Equal rhs: {(0000000000000000000000000000000000000000)} spids: [786] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:EMPTY_TREE) op: assign_op.Equal rhs: {(4b825dc642cb6eb9a060e54bf8d69288fbee4904)} spids: [790] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:EMPTY_BLOB) op: assign_op.Equal rhs: {(e69de29bb2d1d6434b8b29ae775ad8c2e48c5391)} spids: [793] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LF) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'\n' span_id:802))} spids: [800] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:u200c) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:813) command_list: (command.CommandList children: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'\\342\\200\\214' span_id:817))}) ] ) ) } spids: [812] ) ] ) (C {(export)} {(_x05)} {(_x40)} {(_z40)} {(LF)} {(u200c)} {(EMPTY_TREE)} {(EMPTY_BLOB)}) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(DQ (x) ($ Id.VSub_DollarName '$TERM'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (xdumb))} ) (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-t)} {(1)}) (command.Simple words: [{(tput)} {(bold)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:889) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:892) fd: 2 arg_word: {(1)} ) ] ) (command.Simple words: [{(tput)} {(setaf)} {(1)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:904) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:907) fd: 2 arg_word: {(1)} ) ] ) (command.Simple words: [{(tput)} {(sgr0)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:917) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:920) fd: 2 arg_word: {(1)} ) ] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:color) op: assign_op.Equal rhs: {(t)} spids: [929] ) ] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:933) cond: [(C {(test)} {(DQ ($ Id.VSub_Pound '$#'))} {(-ne)} {(0)})] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(-d)} {(--d)} {(--de)} {(--deb)} {(--debu)} {(--debug)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:debug) op: assign_op.Equal rhs: {(t)} spids: [971] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:973) ) (C {(shift)}) ] spids: [957 968 977 -1] ) (case_arm pat_list: [ {(-i)} {(--i)} {(--im)} {(--imm)} {(--imme)} {(--immed)} {(--immedi)} {(--immedia)} {(--immediat)} {(--immediate)} ] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:immediate) op: assign_op.Equal rhs: {(t)} spids: [1002] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1004) ) (C {(shift)}) ] spids: [980 999 1008 -1] ) (case_arm pat_list: [ {(-l)} {(--l)} {(--lo)} {(--lon)} {(--long)} {(--long-)} {(--long-t)} {(--long-te)} {(--long-tes)} {(--long-test)} {(--long-tests)} ] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TEST_LONG) op: assign_op.Equal rhs: {(t)} spids: [1035] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1037) ) (command.Sentence child: (C {(export)} {(GIT_TEST_LONG)}) terminator: (Token id:Id.Op_Semi val:';' span_id:1042) ) (C {(shift)}) ] spids: [1011 1032 1046 -1] ) (case_arm pat_list: [{(-r)}] action: [ (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:1054) ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(DQ ($ Id.VSub_Pound '$#'))} {(-ne)} {(0)}) (command.BraceGroup children: [ (command.Sentence child: (command.Simple words: [ {(echo)} { (SQ (Token id: Id.Lit_Chars val: 'error: -r requires an argument' span_id: 1074 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1077) fd: -1 arg_word: {(2)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1079) ) (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1082) arg_word: {(1)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1085) ) ] ) ] ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:run_list) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1091] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1093) ) (C {(shift)}) ] spids: [1049 1050 1097 -1] ) (case_arm pat_list: [{(--run) (Id.Lit_Equals '=') (Id.Lit_Star '*')}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:run_list) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:1108) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {('--*=')} ) ) } spids: [1106] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1112) ) (C {(shift)}) ] spids: [1100 1103 1116 -1] ) (case_arm pat_list: [{(-h)} {(--h)} {(--he)} {(--hel)} {(--help)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:help) op: assign_op.Equal rhs: {(t)} spids: [1131] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1133) ) (C {(shift)}) ] spids: [1119 1128 1137 -1] ) (case_arm pat_list: [ {(-v)} {(--v)} {(--ve)} {(--ver)} {(--verb)} {(--verbo)} {(--verbos)} {(--verbose)} ] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose) op: assign_op.Equal rhs: {(t)} spids: [1158] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1160) ) (C {(shift)}) ] spids: [1140 1155 1164 -1] ) (case_arm pat_list: [{(--verbose-only) (Id.Lit_Equals '=') (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose_only) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:1175) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('--*=')}) ) } spids: [1173] ) ] ) (C {(shift)}) ] spids: [1167 1170 1183 -1] ) (case_arm pat_list: [{(-q)} {(--q)} {(--qu)} {(--qui)} {(--quie)} {(--quiet)}] action: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$HARNESS_ACTIVE'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:quiet) op: assign_op.Equal rhs: {(t)} spids: [1218] ) ] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1220) ) (C {(shift)}) ] spids: [1186 1197 1224 -1] ) (case_arm pat_list: [{(--with-dashes)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:with_dashes) op: assign_op.Equal rhs: {(t)} spids: [1231] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1233) ) (C {(shift)}) ] spids: [1227 1228 1237 -1] ) (case_arm pat_list: [{(--no-color)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:color) op: assign_op.Equal rhs: (word.Empty) spids: [1244] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1245) ) (C {(shift)}) ] spids: [1240 1241 1249 -1] ) (case_arm pat_list: [ {(--va)} {(--val)} {(--valg)} {(--valgr)} {(--valgri)} {(--valgrin)} {(--valgrind)} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:valgrind) op: assign_op.Equal rhs: {(memcheck)} spids: [1268] ) ] ) (C {(shift)}) ] spids: [1252 1265 1274 -1] ) (case_arm pat_list: [{(--valgrind) (Id.Lit_Equals '=') (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:valgrind) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:1285) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('--*=')}) ) } spids: [1283] ) ] ) (C {(shift)}) ] spids: [1277 1280 1293 -1] ) (case_arm pat_list: [{(--valgrind-only) (Id.Lit_Equals '=') (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:valgrind_only) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:1304) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('--*=')}) ) } spids: [1302] ) ] ) (C {(shift)}) ] spids: [1296 1299 1312 -1] ) (case_arm pat_list: [{(--tee)}] action: [(C {(shift)})] spids: [1315 1316 1321 -1] ) (case_arm pat_list: [{(--root) (Id.Lit_Equals '=') (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:root) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:1335) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('--*=')}) ) } spids: [1333] ) ] ) (C {(shift)}) ] spids: [1327 1330 1343 -1] ) (case_arm pat_list: [{(--chain-lint)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TEST_CHAIN_LINT) op: assign_op.Equal rhs: {(1)} spids: [1350] ) ] ) (C {(shift)}) ] spids: [1346 1347 1356 -1] ) (case_arm pat_list: [{(--no-chain-lint)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TEST_CHAIN_LINT) op: assign_op.Equal rhs: {(0)} spids: [1363] ) ] ) (C {(shift)}) ] spids: [1359 1360 1369 -1] ) (case_arm pat_list: [{(-x)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:trace) op: assign_op.Equal rhs: {(t)} spids: [1376] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose) op: assign_op.Equal rhs: {(t)} spids: [1380] ) ] ) (C {(shift)}) ] spids: [1372 1373 1386 -1] ) (case_arm pat_list: [{(--verbose-log)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose_log) op: assign_op.Equal rhs: {(t)} spids: [1393] ) ] ) (C {(shift)}) ] spids: [1389 1390 1399 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.Sentence child: (command.Simple words: [ {(echo)} {(DQ ("error: unknown test option '") ($ Id.VSub_Number '$1') ("'"))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1414) fd: -1 arg_word: {(2)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1416) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1418) arg_word: {(1)} ) ] spids: [1402 1403 1422 -1] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$valgrind_only'))})] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$valgrind'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:valgrind) op: assign_op.Equal rhs: {(memcheck)} spids: [1453] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$verbose'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose_only) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$valgrind_only'))} spids: [1467] ) ] ) ] ) ] spids: [1430 1440] ) (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$valgrind'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose) op: assign_op.Equal rhs: {(t)} spids: [1485] ) ] ) ] spids: [1472 1482] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$color'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:say_color_error) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1553) command_list: (command.CommandList children: [ (command.Sentence child: (C {(tput)} {(bold)}) terminator: (Token id:Id.Op_Semi val:';' span_id:1557) ) (C {(tput)} {(setaf)} {(1)}) ] ) ) } spids: [1552] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:say_color_skip) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1571) command_list: (command.CommandList children:[(C {(tput)} {(setaf)} {(4)})]) ) } spids: [1570] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:say_color_warn) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1584) command_list: (command.CommandList children:[(C {(tput)} {(setaf)} {(3)})]) ) } spids: [1583] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:say_color_pass) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1597) command_list: (command.CommandList children:[(C {(tput)} {(setaf)} {(2)})]) ) } spids: [1596] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:say_color_info) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1610) command_list: (command.CommandList children:[(C {(tput)} {(setaf)} {(6)})]) ) } spids: [1609] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:say_color_reset) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1623) command_list: (command.CommandList children:[(C {(tput)} {(sgr0)})]) ) } spids: [1622] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:say_color_) op: assign_op.Equal rhs: {(DQ )} spids: [1630] ) ] ) (command.ShFunction name: say_color body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$quiet'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1666) ) ] ) (C {(eval)} { (DQ ('say_color_color=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:1673) ) (say_color_) ($ Id.VSub_Number '$1') ) } ) (C {(shift)}) (C {(printf)} { (DQ ('%s') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:1686) ) (n) ) } { (DQ ($ Id.VSub_DollarName '$say_color_color') ($ Id.VSub_Star '$*') ($ Id.VSub_DollarName '$say_color_reset') ) } ) ] ) ) ] spids: [1491 1501] ) ] else_action: [ (command.ShFunction name: say_color body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$quiet'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1729) ) ] ) (C {(shift)}) (C {(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_Star '$*'))}) ] ) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM) op: assign_op.Equal rhs: {(dumb)} spids: [1753] ) ] ) (C {(export)} {(TERM)}) (command.ShFunction name: error body: (command.BraceGroup children: [ (C {(say_color)} {(error)} {(DQ ('error: ') ($ Id.VSub_Star '$*'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXIT_OK) op: assign_op.Equal rhs: {(t)} spids: [1779] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1783) arg_word: {(1)} ) ] ) ) (command.ShFunction name: say body: (command.BraceGroup children:[(C {(say_color)} {(info)} {(DQ ($ Id.VSub_Star '$*'))})]) ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$HARNESS_ACTIVE'))})] action: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$verbose'))} {(Id.Lit_Equals '=')} {(t)}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$verbose_only'))}) ] ) ] action: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'Bail out! %s\\n' span_id:1851))} { (SQ (Token id: Id.Lit_Chars val: 'verbose mode forbidden under TAP harness; try --verbose-log' span_id: 1857 ) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1861) arg_word: {(1)} ) ] spids: [1822 1845] ) ] ) ] spids: [1809 1819] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(DQ (${ Id.VSub_Name test_description))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ )}) (C {(error)} {(DQ ('Test script did not set test_description.'))}) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(DQ ($ Id.VSub_DollarName '$help'))} {(Id.Lit_Equals '=')} {(DQ (t))})] action: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:1914))} {(DQ ($ Id.VSub_DollarName '$test_description'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1922) arg_word: {(0)} ) ] spids: [1894 1908] ) ] ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'5>&' span_id:1931) fd: 5 arg_word: {(1)} ) ] ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op:(Token id:Id.Redir_LessAnd val:'6<&' span_id:1936) fd:6 arg_word:{(0)}) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$verbose_log'))} {(Id.Lit_Equals '=')} {(DQ (t))}) ] action: [ (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'3>>' span_id:1958) fd: 3 arg_word: {(DQ ($ Id.VSub_DollarName '$GIT_TEST_TEE_OUTPUT_FILE'))} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'4>&' span_id:1963) fd: 4 arg_word: {(3)} ) ] ) ] spids: [1939 1953] ) (if_arm cond: [(C {(test)} {(DQ ($ Id.VSub_DollarName '$verbose'))} {(Id.Lit_Equals '=')} {(DQ (t))})] action: [ (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'4>&' span_id:1985) fd: 4 arg_word: {(2)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'3>&' span_id:1988) fd: 3 arg_word: {(1)} ) ] ) ] spids: [1966 1980] ) ] else_action: [ (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'4>' span_id:1996) fd: 4 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'3>' span_id:1999) fd: 3 arg_word: {(/dev/null)} ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BASH_XTRACEFD) op: assign_op.Equal rhs: {(4)} spids: [2038] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_failure) op: assign_op.Equal rhs: {(0)} spids: [2042] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_count) op: assign_op.Equal rhs: {(0)} spids: [2045] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_fixed) op: assign_op.Equal rhs: {(0)} spids: [2048] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_broken) op: assign_op.Equal rhs: {(0)} spids: [2051] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_success) op: assign_op.Equal rhs: {(0)} spids: [2054] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_external_has_tap) op: assign_op.Equal rhs: {(0)} spids: [2058] ) ] ) (command.ShFunction name: die body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:code) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [2070] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$GIT_EXIT_OK'))})] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2088) arg_word: {($ Id.VSub_DollarName '$code')} ) ] spids: [2074 2085] ) ] else_action: [ (command.Simple words: [ {(echo)} {(DQ ('FATAL: Unexpected exit with code ') ($ Id.VSub_DollarName '$code'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:2098) fd: -1 arg_word: {(5)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2107) arg_word: {(1)} ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXIT_OK) op: assign_op.Equal rhs: (word.Empty) spids: [2117] ) ] ) (C {(trap)} {(SQ (Token id:Id.Lit_Chars val:die span_id:2122))} {(EXIT)}) (C {(trap)} {(SQ (Token id:Id.Lit_Chars val:'exit $?' span_id:2130))} {(INT)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY') (/test-lib-functions.sh))}) (command.ShFunction name: test_ok_ body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_success) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$test_success')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [2165] ) ] ) (C {(say_color)} {(DQ )} {(DQ ('ok ') ($ Id.VSub_DollarName '$test_count') (' - ') ($ Id.VSub_At '$@'))} ) ] ) ) (command.ShFunction name: test_failure_ body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_failure) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$test_failure')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [2199] ) ] ) (C {(say_color)} {(error)} {(DQ ('not ok ') ($ Id.VSub_DollarName '$test_count') (' - ') ($ Id.VSub_Number '$1'))} ) (C {(shift)}) (command.Pipeline children: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:2228))} {(DQ ($ Id.VSub_Star '$*'))} ) (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/^/#\t/' span_id:2242))}) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$immediate'))} {(Id.Lit_Equals '=')} {(DQ )}) (command.BraceGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXIT_OK) op: assign_op.Equal rhs: {(t)} spids: [2261] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2263) ) (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2265) arg_word: {(1)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2268) ) ] ) ] ) ] ) ) (command.ShFunction name: test_known_broken_ok_ body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_fixed) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$test_fixed')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [2283] ) ] ) (C {(say_color)} {(error)} { (DQ ('ok ') ($ Id.VSub_DollarName '$test_count') (' - ') ($ Id.VSub_At '$@') (' # TODO known breakage vanished') ) } ) ] ) ) (command.ShFunction name: test_known_broken_failure_ body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_broken) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$test_broken')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [2315] ) ] ) (C {(say_color)} {(warn)} { (DQ ('not ok ') ($ Id.VSub_DollarName '$test_count') (' - ') ($ Id.VSub_At '$@') (' # TODO known breakage') ) } ) ] ) ) (command.ShFunction name: test_debug body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$debug'))} {(Id.Lit_Equals '=')} {(DQ )}) (C {(eval)} {(DQ ($ Id.VSub_Number '$1'))}) ] ) ] ) ) (command.ShFunction name: match_pattern_list body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:arg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [2377] ) ] ) (C {(shift)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_Star '$*'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2396) arg_word: {(1)} ) ] ) (command.ForEach iter_name: pattern_ do_arg_iter: T body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$arg'))} arms: [ (case_arm pat_list: [{($ Id.VSub_DollarName '$pattern_')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2422) arg_word: {(0)} ) ] spids: [2418 2419 -1 2427] ) ] ) ] ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2433) arg_word: {(1)} ) ] ) ) (command.ShFunction name: match_test_selector_list body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:title) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [2448] ) ] ) (C {(shift)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:arg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [2457] ) ] ) (C {(shift)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2476) arg_word: {(0)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OLDIFS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$IFS')} spids: [2486] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:' \t,' span_id:2492))} spids: [2490] ) ] ) (C {(Id.KW_Set set)} {(--)} {($ Id.VSub_Number '$1')}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OLDIFS')} spids: [2503] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:include) op: assign_op.Equal rhs: (word.Empty) spids: [2512] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(Id.KW_Bang '!') (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:include) op: assign_op.Equal rhs: {(t)} spids: [2528] ) ] ) ] spids: [2524 2526 2531 -1] ) ] ) (command.ForEach iter_name: selector do_arg_iter: T body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:orig_selector) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$selector')} spids: [2546] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:positive) op: assign_op.Equal rhs: {(t)} spids: [2551] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$selector'))} arms: [ (case_arm pat_list: [{(Id.KW_Bang '!') (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:positive) op: assign_op.Equal rhs: (word.Empty) spids: [2569] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:selector) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:selector span_id:2574) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {('?')} ) ) } spids: [2572] ) ] ) ] spids: [2564 2566 2580 -1] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$selector'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:2597) ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$selector'))} arms: [ (case_arm pat_list: [{(Id.Lit_Star '*') (-) (Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (command.Simple words: [ {(expr)} { (DQ (z) (braced_var_sub token: (Token id: Id.VSub_Name val: selector span_id: 2623 ) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPercent arg_word: {('-*')} ) ) ) } {(Id.Lit_Other ':')} {(DQ ('z[0-9]*[^0-9]'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2635) fd: -1 arg_word: {(/dev/null)} ) ] ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('error: ') ($ Id.VSub_DollarName '$title') (': invalid non-numeric in range') ) } { (DQ ("start: '") ($ Id.VSub_DollarName '$orig_selector') ("'") ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:2658) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2662) arg_word: {(1)} ) ] spids: [2616 2639] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Simple words: [ {(expr)} { (DQ (z) (braced_var_sub token: (Token id: Id.VSub_Name val: selector span_id: 2677 ) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {('*-')} ) ) ) } {(Id.Lit_Other ':')} {(DQ ('z[0-9]*[^0-9]'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2689) fd: -1 arg_word: {(/dev/null)} ) ] ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('error: ') ($ Id.VSub_DollarName '$title') (': invalid non-numeric in range') ) } { (DQ ("end: '") ($ Id.VSub_DollarName '$orig_selector') ("'")) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:2712) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2716) arg_word: {(1)} ) ] spids: [2670 2693] ) ] ) ] spids: [2610 2613 2724 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (command.Simple words: [ {(expr)} {(DQ (z) ($ Id.VSub_DollarName '$selector'))} {(Id.Lit_Other ':')} {(DQ ('z[0-9]*[^0-9]'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2746) fd: -1 arg_word: {(/dev/null)} ) ] ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('error: ') ($ Id.VSub_DollarName '$title') (': invalid non-numeric in test') ) } { (DQ ("selector: '") ($ Id.VSub_DollarName '$orig_selector') ("'") ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:2769) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2773) arg_word: {(1)} ) ] spids: [2731 2750] ) ] ) ] spids: [2727 2728 -1 2781] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$include'))}) (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$positive'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:2809) ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$include'))}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$positive'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:2832) ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$selector'))} arms: [ (case_arm pat_list: [{(-) (Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {($ Id.VSub_DollarName '$arg')} {(-le)} { (braced_var_sub token: (Token id:Id.VSub_Name val:selector span_id:2859) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {(-)} ) ) } ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:include) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$positive')} spids: [2868] ) ] ) ] spids: [2850 2865] ) ] ) ] spids: [2845 2847 2875 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*') (-)}] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {($ Id.VSub_DollarName '$arg')} {(-ge)} { (braced_var_sub token: (Token id:Id.VSub_Name val:selector span_id:2892) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: {(-)} ) ) } ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:include) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$positive')} spids: [2901] ) ] ) ] spids: [2883 2898] ) ] ) ] spids: [2878 2880 2908 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*') (-) (Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} { (braced_var_sub token: (Token id: Id.VSub_Name val: selector span_id: 2922 ) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPercent arg_word: {('-*')} ) ) } {(-le)} {($ Id.VSub_DollarName '$arg')} ) (C {(test)} {($ Id.VSub_DollarName '$arg')} {(-le)} { (braced_var_sub token: (Token id: Id.VSub_Name val: selector span_id: 2942 ) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {('*-')} ) ) } ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:include) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$positive')} spids: [2951] ) ] ) ] spids: [2917 2948] ) ] ) ] spids: [2911 2914 2958 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {($ Id.VSub_DollarName '$arg')} {(-eq)} {($ Id.VSub_DollarName '$selector')} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:include) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$positive')} spids: [2979] ) ] ) ] spids: [2965 2976] ) ] ) ] spids: [2961 2962 2986 -1] ) ] ) ] ) ) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$include'))}) ] ) ) (command.ShFunction name: maybe_teardown_verbose body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$verbose_only'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3025) ) ] ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'4>' span_id:3030) fd: 4 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'3>' span_id:3033) fd: 3 arg_word: {(/dev/null)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose) op: assign_op.Equal rhs: (word.Empty) spids: [3037] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:last_verbose) op: assign_op.Equal rhs: {(t)} spids: [3042] ) ] ) (command.ShFunction name: maybe_setup_verbose body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$verbose_only'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3063) ) ] ) (command.If arms: [ (if_arm cond: [ (C {(match_pattern_list)} {($ Id.VSub_DollarName '$test_count')} {($ Id.VSub_DollarName '$verbose_only')} ) ] action: [ (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'4>&' span_id:3080) fd: 4 arg_word: {(2)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'3>&' span_id:3083) fd: 3 arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$last_verbose'))}) (command.Simple words: [{(echo)} {(DQ )}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:3119) fd: -1 arg_word: {(3)} ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose) op: assign_op.Equal rhs: {(t)} spids: [3126] ) ] ) ] spids: [3066 3075] ) ] else_action: [ (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'4>' span_id:3135) fd: 4 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'3>' span_id:3138) fd: 3 arg_word: {(/dev/null)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose) op: assign_op.Equal rhs: (word.Empty) spids: [3142] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:last_verbose) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$verbose')} spids: [3148] ) ] ) ] ) ) (command.ShFunction name: maybe_teardown_valgrind body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$GIT_VALGRIND'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3172) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_VALGRIND_ENABLED) op: assign_op.Equal rhs: (word.Empty) spids: [3175] ) ] ) ] ) ) (command.ShFunction name: maybe_setup_valgrind body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$GIT_VALGRIND'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3198) ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$valgrind_only'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_VALGRIND_ENABLED) op: assign_op.Equal rhs: {(t)} spids: [3215] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3219) ) ] spids: [3201 3212] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_VALGRIND_ENABLED) op: assign_op.Equal rhs: (word.Empty) spids: [3225] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(match_pattern_list)} {($ Id.VSub_DollarName '$test_count')} {($ Id.VSub_DollarName '$valgrind_only')} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_VALGRIND_ENABLED) op: assign_op.Equal rhs: {(t)} spids: [3240] ) ] ) ] spids: [3228 3237] ) ] ) ] ) ) (command.ShFunction name: want_trace body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$trace'))} {(Id.Lit_Equals '=')} {(t)}) (C {(test)} {(DQ ($ Id.VSub_DollarName '$verbose'))} {(Id.Lit_Equals '=')} {(t)}) ] ) ] ) ) (command.ShFunction name: test_eval_inner_ body: (command.BraceGroup children: [ (C {(eval)} {(DQ ('\n') ('\t\twant_trace && set -x\n') ('\t\t') ($ Id.VSub_Star '$*'))}) ] ) ) (command.ShFunction name: test_eval_ body: (command.BraceGroup children: [ (command.BraceGroup children: [ (command.Simple words: [{(test_eval_inner_)} {(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:3367) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:3370) fd: -1 arg_word: {(3)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:3373) fd: 2 arg_word: {(4)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_eval_ret_) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [3377] ) ] ) (command.If arms: [ (if_arm cond: [(C {(want_trace)})] action: [ (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (x)}) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$test_eval_ret_'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} ) ] action: [ (command.Simple words: [ {(say_color)} {(error)} { (DQ ('error: last command exited with ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:3421) ) ('?=') ($ Id.VSub_DollarName '$test_eval_ret_') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:3416) fd: -1 arg_word: {(4)} ) ] ) ] spids: [3395 3409] ) ] ) ] spids: [3381 3386] ) ] ) ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:3435) fd: 2 arg_word: {(/dev/null)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3439) arg_word: {($ Id.VSub_DollarName '$test_eval_ret_')} ) ] ) ) (command.ShFunction name: test_run_ body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_cleanup) op: assign_op.Equal rhs: {(Id.Lit_Other ':')} spids: [3454] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expecting_failure) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [3458] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:GIT_TEST_CHAIN_LINT span_id:3469) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(1)}) ) ) } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3479) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:trace_tmp) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$trace')} spids: [3492] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:trace) op: assign_op.Equal rhs: (word.Empty) spids: [3496] ) ] ) (C {(test_eval_)} {(DQ ('(exit 117) && ') ($ Id.VSub_Number '$1'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(test)} {(DQ ($ Id.VSub_QMark '$?'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(117)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3527) ) ] action: [ (C {(error)} { (DQ ('bug in the test script: broken &&-chain: ') ($ Id.VSub_Number '$1') ) } ) ] spids: [3515 3529] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:trace) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$trace_tmp')} spids: [3543] ) ] ) ] spids: [3463 3481] ) ] ) (C {(setup_malloc_check)}) (C {(test_eval_)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:eval_ret) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [3561] ) ] ) (C {(teardown_malloc_check)}) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DPipe Id.Op_DPipe Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$immediate'))}) (C {(test)} {($ Id.VSub_DollarName '$eval_ret')} {(Id.Lit_Equals '=')} {(0)}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$expecting_failure'))}) (C {(test)} {(DQ ($ Id.VSub_DollarName '$test_cleanup'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (':'))} ) ] ) ] action: [ (C {(setup_malloc_check)}) (C {(test_eval_)} {(DQ ($ Id.VSub_DollarName '$test_cleanup'))}) (C {(teardown_malloc_check)}) ] spids: [3569 3616] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$verbose'))} {(Id.Lit_Equals '=')} {(DQ (t))} ) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$HARNESS_ACTIVE'))}) ] ) ] action: [(C {(echo)} {(DQ )})] spids: [3635 3660] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:3672) arg_word: {(DQ ($ Id.VSub_DollarName '$eval_ret'))} ) ] ) ) (command.ShFunction name: test_start_ body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_count) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$test_count')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [3689] ) ] ) (C {(maybe_setup_verbose)}) (C {(maybe_setup_valgrind)}) ] ) ) (command.ShFunction name: test_finish_ body: (command.BraceGroup children: [ (command.Simple words: [{(echo)} {(DQ )}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:3716) fd: -1 arg_word: {(3)} ) ] ) (C {(maybe_teardown_valgrind)}) (C {(maybe_teardown_verbose)}) ] ) ) (command.ShFunction name: test_skip body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:to_skip) op: assign_op.Equal rhs: (word.Empty) spids: [3739] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skipped_reason) op: assign_op.Equal rhs: (word.Empty) spids: [3742] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(match_pattern_list)} {($ Id.VSub_DollarName '$this_test') (.) ($ Id.VSub_DollarName '$test_count')} {($ Id.VSub_DollarName '$GIT_SKIP_TESTS')} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:to_skip) op: assign_op.Equal rhs: {(t)} spids: [3759] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skipped_reason) op: assign_op.Equal rhs: {(DQ (GIT_SKIP_TESTS))} spids: [3763] ) ] ) ] spids: [3745 3756] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$to_skip'))}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$test_prereq'))}) (command.Pipeline children: [ (C {(test_have_prereq)} {(DQ ($ Id.VSub_DollarName '$test_prereq'))}) ] negated: T ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:to_skip) op: assign_op.Equal rhs: {(t)} spids: [3807] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:of_prereq) op: assign_op.Equal rhs: (word.Empty) spids: [3812] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$missing_prereq'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$test_prereq'))} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:of_prereq) op: assign_op.Equal rhs: {(DQ (' of ') ($ Id.VSub_DollarName '$test_prereq'))} spids: [3834] ) ] ) ] spids: [3815 3831] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skipped_reason) op: assign_op.Equal rhs: { (DQ ('missing ') ($ Id.VSub_DollarName '$missing_prereq') (${ Id.VSub_Name of_prereq) ) } spids: [3844] ) ] ) ] spids: [3772 3804] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$to_skip'))}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$run_list'))}) (command.Pipeline children: [ (C {(match_test_selector_list)} {(SQ (Token id:Id.Lit_Chars val:--run span_id:3885))} {($ Id.VSub_DollarName '$test_count')} {(DQ ($ Id.VSub_DollarName '$run_list'))} ) ] negated: T ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:to_skip) op: assign_op.Equal rhs: {(t)} spids: [3898] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skipped_reason) op: assign_op.Equal rhs: {(DQ (--run))} spids: [3902] ) ] ) ] spids: [3857 3895] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$to_skip'))} arms: [ (case_arm pat_list: [{(t)}] action: [ (command.Simple words: [{(say_color)} {(skip)} {(DQ ('skipping test: ') ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:3929) fd: -1 arg_word: {(3)} ) ] ) (C {(say_color)} {(skip)} { (DQ ('ok ') ($ Id.VSub_DollarName '$test_count') (' # skip ') ($ Id.VSub_Number '$1') (' (') ($ Id.VSub_DollarName '$skipped_reason') (')') ) } ) (C {(Id.Lit_Other ':')} {(true)}) ] spids: [3921 3922 3958 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [(C {(false)})] spids: [3961 3962 3968 -1] ) ] ) ] ) ) (command.ShFunction name: test_at_end_hook_ body: (command.BraceGroup children:[(C {(Id.Lit_Other ':')})]) ) (command.ShFunction name: test_done body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXIT_OK) op: assign_op.Equal rhs: {(t)} spids: [4000] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$HARNESS_ACTIVE'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_results_dir) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TEST_OUTPUT_DIRECTORY') (/test-results))} spids: [4019] ) ] ) (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$test_results_dir'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:base) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:0 span_id:4037) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPound arg_word: {('*') (Id.Lit_Slash /)} ) ) } spids: [4035] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_results_path) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$test_results_dir') (/) (braced_var_sub token: (Token id:Id.VSub_Name val:base span_id:4049) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{(.sh)}) ) (.counts) ) } spids: [4044] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:4060) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$test_results_path'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:4065) fd: -1 here_begin: {(EOF)} here_end_span_id: 4085 stdin_parts: [ ('total ') ($ Id.VSub_DollarName '$test_count') ('\n') ('success ') ($ Id.VSub_DollarName '$test_success') ('\n') ('fixed ') ($ Id.VSub_DollarName '$test_fixed') ('\n') ('broken ') ($ Id.VSub_DollarName '$test_broken') ('\n') ('failed ') ($ Id.VSub_DollarName '$test_failure') ('\n') ('\n') ] ) ] ) ] spids: [4005 4016] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$test_fixed'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} ) ] action: [ (C {(say_color)} {(error)} { (DQ ('# ') ($ Id.VSub_DollarName '$test_fixed') (' known breakage(s) vanished; please update test(s)') ) } ) ] spids: [4091 4105] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$test_broken'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} ) ] action: [ (C {(say_color)} {(warn)} { (DQ ('# still have ') ($ Id.VSub_DollarName '$test_broken') (' known breakage(s)') ) } ) ] spids: [4122 4136] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$test_broken'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} ) (C {(test)} {(DQ ($ Id.VSub_DollarName '$test_fixed'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_remaining) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$test_count')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$test_broken')} ) ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$test_fixed')} ) ) ) } spids: [4183] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:msg) op: assign_op.Equal rhs: { (DQ ('remaining ') ($ Id.VSub_DollarName '$test_remaining') (' test(s)')) } spids: [4200] ) ] ) ] spids: [4153 4180] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_remaining) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$test_count')} spids: [4211] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:msg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$test_count') (' test(s)'))} spids: [4215] ) ] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$test_failure'))} arms: [ (case_arm pat_list: [{(0)}] action: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$skip_all'))}) (C {(test)} {($ Id.VSub_DollarName '$test_count')} {(-gt)} {(0)}) ] ) ] action: [(C {(error)} {(DQ ("Can't use skip_all after running some tests"))})] spids: [4242 4263] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$skip_all'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(DQ (' # SKIP ') ($ Id.VSub_DollarName '$skip_all'))} spids: [4286] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {($ Id.VSub_DollarName '$test_external_has_tap')} {(-eq)} {(0)}) ] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {($ Id.VSub_DollarName '$test_remaining')} {(-gt)} {(0)}) ] action: [ (C {(say_color)} {(Id.KW_Pass pass)} {(DQ ('# passed all ') ($ Id.VSub_DollarName '$msg'))} ) ] spids: [4308 4319] ) ] ) (C {(say)} { (DQ (1..) ($ Id.VSub_DollarName '$test_count') ($ Id.VSub_DollarName '$skip_all') ) } ) ] spids: [4294 4305] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-d)} {(DQ ($ Id.VSub_DollarName '$remove_trash'))}) (C {(cd)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:4362) command_list: (command.CommandList children: [ (C {(dirname)} {(DQ ($ Id.VSub_DollarName '$remove_trash'))}) ] ) ) ) } ) (C {(rm)} {(-rf)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:4379) command_list: (command.CommandList children: [ (C {(basename)} {(DQ ($ Id.VSub_DollarName '$remove_trash'))}) ] ) ) ) } ) ] ) (C {(test_at_end_hook_)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4394) arg_word: {(0)} ) ] spids: [4234 4235 4398 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {($ Id.VSub_DollarName '$test_external_has_tap')} {(-eq)} {(0)}) ] action: [ (C {(say_color)} {(error)} { (DQ ('# failed ') ($ Id.VSub_DollarName '$test_failure') (' among ') ($ Id.VSub_DollarName '$msg') ) } ) (C {(say)} {(DQ (1..) ($ Id.VSub_DollarName '$test_count'))}) ] spids: [4406 4417] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4444) arg_word: {(1)} ) ] spids: [4402 4403 4448 -1] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$valgrind'))})] action: [ (command.ShFunction name: make_symlink body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {(test)} {(-h)} {(DQ ($ Id.VSub_Number '$2'))}) (C {(test)} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_Equals '=')} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:4498) command_list: (command.CommandList children: [(C {(readlink)} {(DQ ($ Id.VSub_Number '$2'))})] ) ) ) } ) (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(mkdir)} {(DQ ($ Id.VSub_Number '$2')) (.lock)})] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(rm)} {(-f)} {(DQ ($ Id.VSub_Number '$2'))}) (C {(ln)} {(-s)} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} ) (C {(rm)} {(-r)} {(DQ ($ Id.VSub_Number '$2')) (.lock)}) ] ) ] spids: [4516 4526] ) ] else_action: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:4568) cond: [(C {(test)} {(-d)} {(DQ ($ Id.VSub_Number '$2')) (.lock)})] body: (command.DoGroup children: [ (C {(say)} {(DQ ('Waiting for lock on ') ($ Id.VSub_Number '$2') (.))} ) (C {(sleep)} {(1)}) ] ) ) ] ) ] ) ] ) ] ) ) (command.ShFunction name: make_valgrind_symlink body: (command.BraceGroup children: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe Id.Op_DPipe] children: [ (C {(test)} {(-x)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(test)} {(DQ ('# '))} {(Id.Lit_Equals '=')} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:4646) command_list: (command.CommandList children: [ (command.Simple words: [{(head)} {(-c)} {(2)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:4653) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1'))} ) ] ) ] ) ) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:4663) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:4664) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:base) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:4669) command_list: (command.CommandList children: [(C {(basename)} {(DQ ($ Id.VSub_Number '$1'))})] ) ) } spids: [4668] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symlink_target) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$GIT_BUILD_DIR') (/) ($ Id.VSub_DollarName '$base') } spids: [4678] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test)} {(-x)} {(DQ ($ Id.VSub_DollarName '$symlink_target'))}) (C {(test)} {(Id.KW_Bang '!')} {(-d)} {(DQ ($ Id.VSub_DollarName '$symlink_target'))} ) (C {(test)} {(DQ ('#!'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 4724 ) command_list: (command.CommandList children: [ (command.Simple words: [{(head)} {(-c)} {(2)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:4731) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$symlink_target'))} ) ] ) ] ) ) ) } ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symlink_target) op: assign_op.Equal rhs: {(../valgrind.sh)} spids: [4743] ) ] ) ] spids: [4688 4740] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$base'))} arms: [ (case_arm pat_list: [{(Id.Lit_Star '*') (.sh)} {(Id.Lit_Star '*') (.perl)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:symlink_target) op: assign_op.Equal rhs: {(../unprocessed-script)} spids: [4767] ) ] ) ] spids: [4759 4764 -1 4771] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(make_symlink)} {(DQ ($ Id.VSub_DollarName '$symlink_target'))} { (DQ ($ Id.VSub_DollarName '$GIT_VALGRIND') (/bin/) ($ Id.VSub_DollarName '$base') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4792) ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_VALGRIND) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$TEST_DIRECTORY') (/valgrind)} spids: [4803] ) ] ) (C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$GIT_VALGRIND')) (/bin)}) (command.ForEach iter_name: file iter_words: [ {($ Id.VSub_DollarName '$GIT_BUILD_DIR') (/git) (Id.Lit_Star '*')} {($ Id.VSub_DollarName '$GIT_BUILD_DIR') (/t/helper/test-) (Id.Lit_Star '*')} ] do_arg_iter: F body: (command.DoGroup children: [(C {(make_valgrind_symlink)} {($ Id.VSub_DollarName '$file')})] ) ) (C {(make_symlink)} {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR')) (/mergetools)} {(DQ ($ Id.VSub_DollarName '$GIT_VALGRIND') (/bin/mergetools))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OLDIFS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$IFS')} spids: [4861] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: {(Id.Lit_Other ':')} spids: [4865] ) ] ) (command.ForEach iter_name: path iter_words: [{($ Id.VSub_DollarName '$PATH')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Pipeline children: [ (command.Simple words: [ {(ls)} {(DQ ($ Id.VSub_DollarName '$path')) (/git-) (Id.Lit_Star '*')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:4889) fd: 2 arg_word: {(/dev/null)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:4896) cond: [(C {(read)} {(file)})] body: (command.DoGroup children: [ (C {(make_valgrind_symlink)} {(DQ ($ Id.VSub_DollarName '$file'))}) ] ) ) ] negated: F ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OLDIFS')} spids: [4919] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$GIT_VALGRIND') (/bin) (Id.Lit_Other ':') ($ Id.VSub_DollarName '$PATH') } spids: [4923] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXEC_PATH) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$GIT_VALGRIND') (/bin)} spids: [4930] ) ] ) (C {(export)} {(GIT_VALGRIND)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_VALGRIND_MODE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$valgrind'))} spids: [4940] ) ] ) (C {(export)} {(GIT_VALGRIND_MODE)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_VALGRIND_ENABLED) op: assign_op.Equal rhs: {(t)} spids: [4951] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$valgrind_only'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_VALGRIND_ENABLED) op: assign_op.Equal rhs: (word.Empty) spids: [4965] ) ] ) ] ) (C {(export)} {(GIT_VALGRIND_ENABLED)}) ] spids: [4457 4467] ) (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_INSTALLED'))})] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXEC_PATH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:4986) command_list: (command.CommandList children: [ (C {($ Id.VSub_DollarName '$GIT_TEST_INSTALLED') (/git)} {(--exec-path)} ) ] ) ) } spids: [4985] ) ] ) (C {(error)} {(DQ ('Cannot run git from ') ($ Id.VSub_DollarName '$GIT_TEST_INSTALLED') (.))} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$GIT_TEST_INSTALLED') (Id.Lit_Other ':') ($ Id.VSub_DollarName '$GIT_BUILD_DIR') (Id.Lit_Other ':') ($ Id.VSub_DollarName '$PATH') } spids: [5005] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXEC_PATH) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:GIT_TEST_EXEC_PATH span_id:5015) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {($ Id.VSub_DollarName '$GIT_EXEC_PATH')} ) ) } spids: [5013] ) ] ) ] spids: [4972 4982] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:git_bin_dir) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR') (/bin-wrappers))} spids: [5026] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [(C {(test)} {(-x)} {(DQ ($ Id.VSub_DollarName '$git_bin_dir') (/git))})] negated: T ) ] action: [ (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$with_dashes'))})] action: [ (C {(say)} { (DQ ($ Id.VSub_DollarName '$git_bin_dir') ('/git is not executable; using GIT_EXEC_PATH') ) } ) ] spids: [5050 5061] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:with_dashes) op: assign_op.Equal rhs: {(t)} spids: [5075] ) ] ) ] spids: [5033 5047] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$git_bin_dir') (':') ($ Id.VSub_DollarName '$PATH'))} spids: [5082] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXEC_PATH) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$GIT_BUILD_DIR')} spids: [5090] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$with_dashes'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR') (':') ($ Id.VSub_DollarName '$PATH') ) } spids: [5108] ) ] ) ] spids: [5094 5105] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TEMPLATE_DIR) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR')) (/templates/blt)} spids: [5120] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_CONFIG_NOSYSTEM) op: assign_op.Equal rhs: {(1)} spids: [5126] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_ATTR_NOSYSTEM) op: assign_op.Equal rhs: {(1)} spids: [5129] ) ] ) (C {(export)} {(PATH)} {(GIT_EXEC_PATH)} {(GIT_TEMPLATE_DIR)} {(GIT_CONFIG_NOSYSTEM)} {(GIT_ATTR_NOSYSTEM)} ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CMP'))})] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CMP_USE_COPIED_CONTEXT'))}) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TEST_CMP) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$DIFF') (' -c'))} spids: [5172] ) ] ) ] spids: [5158 5169] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TEST_CMP) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$DIFF') (' -u'))} spids: [5182] ) ] ) ] ) ] spids: [5145 5155] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GITPERLLIB) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR')) (/perl/blib/lib) (Id.Lit_Other ':') (DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR')) (/perl/blib/arch/auto/Git) } spids: [5194] ) ] ) (C {(export)} {(GITPERLLIB)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-d)} {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR')) (/templates/blt)}) (command.BraceGroup children: [(C {(error)} {(DQ ("You haven't built things yet, have you?"))})] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {(test)} {(-x)} {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR')) (/t/helper/test-chmtime)} ) ] negated: T ) ] action: [ (command.Simple words: [ {(echo)} {(SQ (Token id:Id.Lit_Chars val:'You need to build test-chmtime:' span_id:5254))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:5250) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [ {(echo)} { (SQ (Token id: Id.Lit_Chars val: 'Run "make t/helper/test-chmtime" in the source (toplevel) directory' span_id: 5264 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:5260) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5268) arg_word: {(1)} ) ] spids: [5232 5245] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TRASH_DIRECTORY) op: assign_op.Equal rhs: { (DQ ('trash directory.') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:5281) command_list: (command.CommandList children: [(C {(basename)} {(DQ ($ Id.VSub_Number '$0'))} {(.sh)})] ) ) ) } spids: [5278] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$root'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TRASH_DIRECTORY) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$root') (/) ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))} spids: [5302] ) ] ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))} arms: [ (case_arm pat_list:[{(/) (Id.Lit_Star '*')}] spids:[5317 5319 5321 -1]) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TRASH_DIRECTORY) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$TEST_OUTPUT_DIRECTORY') (/) ($ Id.VSub_DollarName '$TRASH_DIRECTORY') ) } spids: [5330] ) ] ) ] spids: [5327 5328 5337 -1] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(Id.KW_Bang '!')} {(-z)} {(DQ ($ Id.VSub_DollarName '$debug'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:remove_trash) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$TRASH_DIRECTORY')} spids: [5353] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(rm)} {(-fr)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))}) (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_EXIT_OK) op: assign_op.Equal rhs: {(t)} spids: [5369] ) ] ) (command.Simple words: [{(echo)} {(DQ ('FATAL: Cannot prepare test area'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:5375) fd: -1 arg_word: {(5)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5383) arg_word: {(1)} ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HOME) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))} spids: [5390] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GNUPGHOME) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$HOME') (/gnupg-home-not-used))} spids: [5395] ) ] ) (C {(export)} {(HOME)} {(GNUPGHOME)}) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$TEST_NO_CREATE_REPO'))})] action: [(C {(test_create_repo)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))})] spids: [5408 5418] ) ] else_action: [(C {(mkdir)} {(-p)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))})] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(cd)} {(-P)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5456) arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:this_test) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:0 span_id:5463) suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPound arg_word:{('*') (Id.Lit_Slash /)}) ) } spids: [5461] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:this_test) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:this_test span_id:5471) suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{('-*')}) ) } spids: [5469] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(match_pattern_list)} {(DQ ($ Id.VSub_DollarName '$this_test'))} {($ Id.VSub_DollarName '$GIT_SKIP_TESTS')} ) ] action: [ (command.Simple words: [ {(say_color)} {(info)} {(DQ ('skipping test ') ($ Id.VSub_DollarName '$this_test') (' altogether'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:5493) fd: -1 arg_word: {(3)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(DQ ('skip all tests in ') ($ Id.VSub_DollarName '$this_test'))} spids: [5503] ) ] ) (C {(test_done)}) ] spids: [5476 5486] ) ] ) (command.ShFunction name: yes body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(test)} {($ Id.VSub_Pound '$#')} {(Id.Lit_Equals '=')} {(0)})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:y) op: assign_op.Equal rhs: {(y)} spids: [5540] ) ] ) ] spids: [5526 5537] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:y) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [5547] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i) op: assign_op.Equal rhs: {(0)} spids: [5557] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:5561) cond: [(C {(test)} {($ Id.VSub_DollarName '$i')} {(-lt)} {(99)})] body: (command.DoGroup children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$y'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$i')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [5582] ) ] ) ] ) ) ] ) ) (command.Case to_match: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:5601) command_list: (command.CommandList children:[(C {(uname)} {(-s)})]) ) } arms: [ (case_arm pat_list: [{(Id.Lit_Star '*') (MINGW) (Id.Lit_Star '*')}] action: [ (command.ShFunction name: sort body: (command.BraceGroup children:[(C {(/usr/bin/sort)} {(DQ ($ Id.VSub_At '$@'))})]) ) (command.ShFunction name: find body: (command.BraceGroup children:[(C {(/usr/bin/find)} {(DQ ($ Id.VSub_At '$@'))})]) ) (command.ShFunction name: sum body: (command.BraceGroup children:[(C {(md5sum)} {(DQ ($ Id.VSub_At '$@'))})]) ) (command.ShFunction name: pwd body: (command.BraceGroup children:[(C {(builtin)} {(pwd)} {(-W)})]) ) (C {(test_set_prereq)} {(MINGW)}) (C {(test_set_prereq)} {(NATIVE_CRLF)}) (C {(test_set_prereq)} {(SED_STRIPS_CR)}) (C {(test_set_prereq)} {(GREP_STRIPS_CR)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TEST_CMP) op: assign_op.Equal rhs: {(mingw_test_cmp)} spids: [5727] ) ] ) ] spids: [5609 5612 5731 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*') (CYGWIN) (Id.Lit_Star '*')}] action: [ (C {(test_set_prereq)} {(POSIXPERM)}) (C {(test_set_prereq)} {(EXECKEEPSPID)}) (C {(test_set_prereq)} {(CYGWIN)}) (C {(test_set_prereq)} {(SED_STRIPS_CR)}) (C {(test_set_prereq)} {(GREP_STRIPS_CR)}) ] spids: [5733 5736 5764 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (C {(test_set_prereq)} {(POSIXPERM)}) (C {(test_set_prereq)} {(BSLASHPSPEC)}) (C {(test_set_prereq)} {(EXECKEEPSPID)}) ] spids: [5766 5767 5785 -1] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COLUMNS) op: assign_op.Equal rhs: {(1)} spids: [5792] ) ] ) (C {(test)} {($ Id.VSub_DollarName '$COLUMNS')} {(Id.Lit_Equals '=')} {(1)}) ] ) ] ) ) (C {(test_set_prereq)} {(COLUMNS_CAN_BE_1)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$NO_PERL'))}) (C {(test_set_prereq)} {(PERL)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$NO_PYTHON'))}) (C {(test_set_prereq)} {(PYTHON)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$USE_LIBPCRE'))}) (C {(test_set_prereq)} {(LIBPCRE)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$NO_GETTEXT'))}) (C {(test_set_prereq)} {(GETTEXT)}) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$GETTEXT_POISON'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_GETTEXT_POISON) op: assign_op.Equal rhs: {(YesPlease)} spids: [5886] ) ] ) (C {(export)} {(GIT_GETTEXT_POISON)}) (C {(test_set_prereq)} {(GETTEXT_POISON)}) ] spids: [5873 5883] ) ] else_action: [(C {(test_set_prereq)} {(C_LOCALE_OUTPUT)})] ) (command.ShFunction name: test_i18ncmp body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$GETTEXT_POISON'))}) (C {(test_cmp)} {(DQ ($ Id.VSub_At '$@'))}) ] ) ] ) ) (command.ShFunction name: test_i18ngrep body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$GETTEXT_POISON'))})] action: [(C {(Id.Lit_Other ':')})] spids: [5971 5982] ) (if_arm cond: [ (C {(test)} {(DQ ('x!'))} {(Id.Lit_Equals '=')} {(DQ (x) ($ Id.VSub_Number '$1'))}) ] action: [ (C {(shift)}) (command.Pipeline children: [(C {(grep)} {(DQ ($ Id.VSub_At '$@'))})] negated: T ) ] spids: [5991 6007] ) ] else_action: [(C {(grep)} {(DQ ($ Id.VSub_At '$@'))})] ) ] ) ) (C {(test_lazy_prereq)} {(PIPE)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6042) (Token id: Id.Lit_Chars val: '\t# test whether the filesystem supports FIFOs\n' span_id: 6043 ) (Token id:Id.Lit_Chars val:'\tcase $(uname -s) in\n' span_id:6044) (Token id:Id.Lit_Chars val:'\tCYGWIN*|MINGW*)\n' span_id:6045) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:6046) (Token id:Id.Lit_Chars val:'\t\t;;\n' span_id:6047) (Token id:Id.Lit_Chars val:'\t*)\n' span_id:6048) (Token id: Id.Lit_Chars val: '\t\trm -f testfifo && mkfifo testfifo\n' span_id: 6049 ) (Token id:Id.Lit_Chars val:'\t\t;;\n' span_id:6050) (Token id:Id.Lit_Chars val:'\tesac\n' span_id:6051) ) } ) (C {(test_lazy_prereq)} {(SYMLINKS)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6060) (Token id: Id.Lit_Chars val: '\t# test whether the filesystem supports symbolic links\n' span_id: 6061 ) (Token id:Id.Lit_Chars val:'\tln -s x y && test -h y\n' span_id:6062) ) } ) (C {(test_lazy_prereq)} {(FILEMODE)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6071) (Token id: Id.Lit_Chars val: '\ttest "$(git config --bool core.filemode)" = true\n' span_id: 6072 ) ) } ) (C {(test_lazy_prereq)} {(CASE_INSENSITIVE_FS)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6081) (Token id:Id.Lit_Chars val:'\techo good >CamelCase &&\n' span_id:6082) (Token id:Id.Lit_Chars val:'\techo bad >camelcase &&\n' span_id:6083) (Token id:Id.Lit_Chars val:'\ttest "$(cat CamelCase)" != good\n' span_id:6084) ) } ) (C {(test_lazy_prereq)} {(UTF8_NFD_TO_NFC)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6093) (Token id: Id.Lit_Chars val: '\t# check whether FS converts nfd unicode to nfc\n' span_id: 6094 ) (Token id:Id.Lit_Chars val:'\tauml=$(printf "\\303\\244")\n' span_id:6095) (Token id: Id.Lit_Chars val: '\taumlcdiar=$(printf "\\141\\314\\210")\n' span_id: 6096 ) (Token id:Id.Lit_Chars val:'\t>"$auml" &&\n' span_id:6097) (Token id:Id.Lit_Chars val:'\tcase "$(echo *)" in\n' span_id:6098) (Token id:Id.Lit_Chars val:'\t"$aumlcdiar")\n' span_id:6099) (Token id:Id.Lit_Chars val:'\t\ttrue ;;\n' span_id:6100) (Token id:Id.Lit_Chars val:'\t*)\n' span_id:6101) (Token id:Id.Lit_Chars val:'\t\tfalse ;;\n' span_id:6102) (Token id:Id.Lit_Chars val:'\tesac\n' span_id:6103) ) } ) (C {(test_lazy_prereq)} {(AUTOIDENT)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6112) (Token id:Id.Lit_Chars val:'\tsane_unset GIT_AUTHOR_NAME &&\n' span_id:6113) (Token id:Id.Lit_Chars val:'\tsane_unset GIT_AUTHOR_EMAIL &&\n' span_id:6114) (Token id:Id.Lit_Chars val:'\tgit var GIT_AUTHOR_IDENT\n' span_id:6115) ) } ) (C {(test_lazy_prereq)} {(EXPENSIVE)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6124) (Token id:Id.Lit_Chars val:'\ttest -n "$GIT_TEST_LONG"\n' span_id:6125) ) } ) (C {(test_lazy_prereq)} {(USR_BIN_TIME)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6134) (Token id:Id.Lit_Chars val:'\ttest -x /usr/bin/time\n' span_id:6135) ) } ) (C {(test_lazy_prereq)} {(NOT_ROOT)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6144) (Token id:Id.Lit_Chars val:'\tuid=$(id -u) &&\n' span_id:6145) (Token id:Id.Lit_Chars val:'\ttest "$uid" != 0\n' span_id:6146) ) } ) (C {(test_lazy_prereq)} {(JGIT)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6155) (Token id:Id.Lit_Chars val:'\ttype jgit\n' span_id:6156) ) } ) (C {(test_lazy_prereq)} {(SANITY)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6196) (Token id:Id.Lit_Chars val:'\tmkdir SANETESTD.1 SANETESTD.2 &&\n' span_id:6197) (Token id:Id.Lit_Chars val:'\n' span_id:6198) (Token id: Id.Lit_Chars val: '\tchmod +w SANETESTD.1 SANETESTD.2 &&\n' span_id: 6199 ) (Token id:Id.Lit_Chars val:'\t>SANETESTD.1/x 2>SANETESTD.2/x &&\n' span_id:6200) (Token id:Id.Lit_Chars val:'\tchmod -w SANETESTD.1 &&\n' span_id:6201) (Token id:Id.Lit_Chars val:'\tchmod -r SANETESTD.1/x &&\n' span_id:6202) (Token id:Id.Lit_Chars val:'\tchmod -rx SANETESTD.2 ||\n' span_id:6203) (Token id:Id.Lit_Chars val:'\terror "bug in test sript: cannot prepare SANETESTD"\n' span_id:6204) (Token id:Id.Lit_Chars val:'\n' span_id:6205) (Token id:Id.Lit_Chars val:'\t! test -r SANETESTD.1/x &&\n' span_id:6206) (Token id: Id.Lit_Chars val: '\t! rm SANETESTD.1/x && ! test -f SANETESTD.2/x\n' span_id: 6207 ) (Token id:Id.Lit_Chars val:'\tstatus=$?\n' span_id:6208) (Token id:Id.Lit_Chars val:'\n' span_id:6209) (Token id: Id.Lit_Chars val: '\tchmod +rwx SANETESTD.1 SANETESTD.2 &&\n' span_id: 6210 ) (Token id:Id.Lit_Chars val:'\trm -rf SANETESTD.1 SANETESTD.2 ||\n' span_id:6211) (Token id: Id.Lit_Chars val: '\terror "bug in test sript: cannot clean SANETESTD"\n' span_id: 6212 ) (Token id:Id.Lit_Chars val:'\treturn $status\n' span_id:6213) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_UNZIP) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:GIT_UNZIP span_id:6219) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(unzip)}) ) } spids: [6217] ) ] ) (C {(test_lazy_prereq)} {(UNZIP)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6229) (Token id:Id.Lit_Chars val:'\t"$GIT_UNZIP" -v\n' span_id:6230) (Token id:Id.Lit_Chars val:'\ttest $? -ne 127\n' span_id:6231) ) } ) (command.ShFunction name: run_with_limited_cmdline body: (command.BraceGroup children: [ (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [(C {(ulimit)} {(-s)} {(128)}) (C {(DQ ($ Id.VSub_At '$@'))})] ) ] ) ) ] ) ) (C {(test_lazy_prereq)} {(CMDLINE_LIMIT)} {(SQ (Token id:Id.Lit_Chars val:'run_with_limited_cmdline true' span_id:6265))} ) (command.ShFunction name: build_option body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(git)} {(version)} {(--build-options)}) (C {(sed)} {(-ne)} {(DQ ('s/^') ($ Id.VSub_Number '$1') (': //p'))}) ] negated: F ) ] ) ) (C {(test_lazy_prereq)} {(LONG_IS_64BIT)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:6304) (Token id: Id.Lit_Chars val: '\ttest 8 -le "$(build_option sizeof-long)"\n' span_id: 6305 ) ) } ) ] )