(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:USAGE) op: Equal rhs: {(SQ <'[help|start|bad|good|new|old|terms|skip|next|reset|visualize|replay|log|run]'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LONG_USAGE) op: Equal rhs: { (SQ <'git bisect help\n'> <'\tprint this long help message.\n'> <'git bisect start [--term-{old,good}=<term> --term-{new,bad}=<term>]\n'> <'\t\t [--no-checkout] [<bad> [<good>...]] [--] [<pathspec>...]\n'> <'\treset bisect state and start bisection.\n'> <'git bisect (bad|new) [<rev>]\n'> <'\tmark <rev> a known-bad revision/\n'> <'\t\ta revision after change in a given property.\n'> <'git bisect (good|old) [<rev>...]\n'> <'\tmark <rev>... known-good revisions/\n'> <'\t\trevisions before change in a given property.\n'> <'git bisect terms [--term-good | --term-bad]\n'> <'\tshow the terms used for old and new commits (default: bad, good)\n'> <'git bisect skip [(<rev>|<range>)...]\n'> <'\tmark <rev>... untestable revisions.\n'> <'git bisect next\n'> <'\tfind next bisection to test and check it out.\n'> <'git bisect reset [<commit>]\n'> <'\tfinish bisection search and go back to commit.\n'> <'git bisect visualize\n'> <'\tshow bisect status in gitk.\n'> <'git bisect replay <logfile>\n'> <'\treplay bisection log.\n'> <'git bisect log\n'> <'\tshow bisect log.\n'> <'git bisect run <cmd>...\n'> <'\tuse <cmd>... to automatically bisect.\n'> <'\n'> <'Please use "git help bisect" to get the full man page.'> ) } ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:OPTIONS_SPEC) op:Equal rhs:(word.Empty))] ) (C {(.)} {(git-sh-setup)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_x40) op: Equal rhs: {(SQ <'[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'>)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_x40) op: Equal rhs: { (DQ ($ VSub_DollarName '$_x40') ($ VSub_DollarName '$_x40') ($ VSub_DollarName '$_x40') ($ VSub_DollarName '$_x40') ($ VSub_DollarName '$_x40') ($ VSub_DollarName '$_x40') ($ VSub_DollarName '$_x40') ($ VSub_DollarName '$_x40') ) } ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:TERM_BAD) op:Equal rhs:{(bad)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:TERM_GOOD) op:Equal rhs:{(good)})] ) (command.ShFunction name: bisect_head body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(test)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_HEAD))})] action: [(C {(echo)} {(BISECT_HEAD)})] ) ] else_action: [(C {(echo)} {(HEAD)})] ) ] ) ) (command.ShFunction name: bisect_autostart body: (command.BraceGroup children: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_START))}) (command.BraceGroup children: [ (command.Simple words: [ {(gettextln)} { (DQ ('You need to start by ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\"'> ) ('git bisect start') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\"'>) ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-t)} {(0)})] action: [ (command.Simple words: [{(gettext)} {(DQ ('Do you want me to do it for you [Y/n]? '))}] redirects: [ (redir.Redir op: <Redir_GreatAnd '>&'> fd: 16777215 arg_word: {(2)} ) ] ) (C {(read)} {(yesno)}) (command.Case to_match: {(DQ ($ VSub_DollarName '$yesno'))} arms: [ (case_arm pat_list: [ {(Lit_LBracket '[') (Nn) (Lit_RBracket ']') (Lit_Star '*')} ] action: [(command.ControlFlow token:<ControlFlow_Exit exit>)] ) ] ) (C {(bisect_start)}) ] ) ] else_action: [(command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})] ) ] ) ] ) ] ) ) (command.ShFunction name: bisect_start body: (command.BraceGroup children: [ (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:has_double_dash) op:Equal rhs:{(0)})] ) (command.ForEach iter_name: arg do_arg_iter: T body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ VSub_DollarName '$arg'))} arms: [ (case_arm pat_list: [{(--)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:has_double_dash) op: Equal rhs: {(1)} ) ] ) terminator: <Op_Semi ';'> ) (command.ControlFlow token: <ControlFlow_Break break> ) ] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:orig_args) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--sq-quote)} {(DQ ($ VSub_At '$@'))})] ) ) } ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:bad_seen) op:Equal rhs:{(0)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:eval) op:Equal rhs:{(SQ )})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:must_write_terms) op:Equal rhs:{(0)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:revs) op:Equal rhs:{(SQ )})] ) (command.If arms: [ (if_arm cond: [ (C {(test)} { (DQ (z) (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(--is-bare-repository)})] ) ) ) } {(KW_Bang '!') (Lit_Equals '=')} {(zfalse)} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:mode) op: Equal rhs: {(--no-checkout)} ) ] ) ] ) ] else_action: [ (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:mode) op:Equal rhs:{(SQ )})] ) ] ) (command.WhileUntil keyword: <KW_While while> cond: [ (command.Sentence child: (C {(Lit_LBracket '[')} {($ VSub_Pound '$#')} {(-gt)} {(0)} {(Lit_RBracket ']')}) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:arg) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) (command.Case to_match: {(DQ ($ VSub_DollarName '$arg'))} arms: [ (case_arm pat_list: [{(--)}] action: [(C {(shift)}) (command.ControlFlow token:<ControlFlow_Break break>)] ) (case_arm pat_list: [{(--no-checkout)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:mode) op: Equal rhs: {(--no-checkout)} ) ] ) (C {(shift)}) ] ) (case_arm pat_list: [{(--term-good)} {(--term-old)}] action: [ (C {(shift)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:must_write_terms) op: Equal rhs: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM_GOOD) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (C {(shift)}) ] ) (case_arm pat_list: [ {(--term-good) (Lit_Equals '=') (Lit_Star '*')} {(--term-old) (Lit_Equals '=') (Lit_Star '*')} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:must_write_terms) op: Equal rhs: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM_GOOD) op: Equal rhs: { (braced_var_sub token: <VSub_Number 1> suffix_op: (suffix_op.Unary op_id:VOp1_Pound arg_word:{('*=')}) ) } ) ] ) (C {(shift)}) ] ) (case_arm pat_list: [{(--term-bad)} {(--term-new)}] action: [ (C {(shift)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:must_write_terms) op: Equal rhs: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM_BAD) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (C {(shift)}) ] ) (case_arm pat_list: [ {(--term-bad) (Lit_Equals '=') (Lit_Star '*')} {(--term-new) (Lit_Equals '=') (Lit_Star '*')} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:must_write_terms) op: Equal rhs: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM_BAD) op: Equal rhs: { (braced_var_sub token: <VSub_Number 1> suffix_op: (suffix_op.Unary op_id:VOp1_Pound arg_word:{('*=')}) ) } ) ] ) (C {(shift)}) ] ) (case_arm pat_list: [{(--) (Lit_Star '*')}] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("unrecognised option: '") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("arg'") ) } ) ] ) ) ) } ) ] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (command.AndOr ops: [Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rev) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {(-q)} {(--verify)} {(DQ ($ VSub_DollarName '$arg') ('^{commit}'))} ) ] ) ) } ) ] ) (command.BraceGroup children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(test)} {($ VSub_DollarName '$has_double_dash')} {(-eq)} {(1)} ) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("'") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("arg' does not appear to be a valid revision") ) } ) ] ) ) ) } ) ] ) (command.ControlFlow token: <ControlFlow_Break break> ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:revs) op: Equal rhs: { (DQ ($ VSub_DollarName '$revs') (' ') ($ VSub_DollarName '$rev')) } ) ] ) (C {(shift)}) ] ) ] ) ] ) ) (command.ForEach iter_name: rev iter_words: [{($ VSub_DollarName '$revs')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:must_write_terms) op: Equal rhs: {(1)} ) ] ) (command.Case to_match: {($ VSub_DollarName '$bad_seen')} arms: [ (case_arm pat_list: [{(0)}] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:state) op: Equal rhs: {($ VSub_DollarName '$TERM_BAD')} ) ] ) terminator: <Op_Semi ';'> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bad_seen) op: Equal rhs: {(1)} ) ] ) ] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:state) op: Equal rhs: {($ VSub_DollarName '$TERM_GOOD')} ) ] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:eval) op: Equal rhs: { (DQ ($ VSub_DollarName '$eval') (" bisect_write '") ($ VSub_DollarName '$state') ("' '") ($ VSub_DollarName '$rev') ("' 'nolog' &&") ) } ) ] ) ] ) ) (command.AndOr ops: [Op_DPipe Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:head) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [{(git)} {(symbolic-ref)} {(-q)} {(HEAD)}] more_env: [ (env_pair name: GIT_DIR val: {(DQ ($ VSub_DollarName '$GIT_DIR'))} ) ] ) ] ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:head) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [{(git)} {(rev-parse)} {(--verify)} {(HEAD)}] more_env: [ (env_pair name: GIT_DIR val: {(DQ ($ VSub_DollarName '$GIT_DIR'))} ) ] ) ] ) ) } ) ] ) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(gettext)} {(DQ ('Bad HEAD - I need a HEAD'))})] ) ) ) } ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:start_head) op:Equal rhs:{(SQ )})] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_START))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:start_head) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(cat)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_START))}) ] ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ (z) ($ VSub_DollarName '$mode'))} {(KW_Bang '!') (Lit_Equals '=')} {(DQ (z--no-checkout))} ) ] action: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(git)} {(checkout)} {(DQ ($ VSub_DollarName '$start_head'))} {(--)}) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("Checking out '") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("start_head' failed. Try 'git bisect reset <valid-branch>'.") ) } ) ] ) ) ) } ) ] ) ] ) ] ) ] ) ] else_action: [ (command.Case to_match: {(DQ ($ VSub_DollarName '$head'))} arms: [ (case_arm pat_list: [{(refs/heads/) (Lit_Star '*')} {($ VSub_DollarName '$_x40')}] action: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(Lit_LBracket '[')} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/head-name))} {(Lit_RBracket ']')} ) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(gettext)} {(DQ ("won't bisect on cg-seek'ed tree"))}) ] ) ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:start_head) op: Equal rhs: { (DQ (braced_var_sub token: <VSub_Name head> suffix_op: (suffix_op.Unary op_id: VOp1_Pound arg_word: {(refs) (Lit_Slash /) (heads) (Lit_Slash /)} ) ) ) } ) ] ) ] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(gettext)} {(DQ ('Bad HEAD - strange symbolic ref'))}) ] ) ) ) } ) ] ) ] ) ] ) (command.AndOr ops: [Op_DPipe] children: [(C {(bisect_clean_state)}) (command.ControlFlow token:<ControlFlow_Exit exit>)] ) (C {(trap)} {(SQ <bisect_clean_state>)} {(0)}) (C {(trap)} {(SQ <'exit 255'>)} {(1)} {(2)} {(3)} {(15)}) (command.AndOr ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DPipe] children: [ (command.Simple words: [{(echo)} {(DQ ($ VSub_DollarName '$start_head'))}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_START))} ) ] ) (command.BraceGroup children: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(DQ (z) ($ VSub_DollarName '$mode'))} {(KW_Bang '!') (Lit_Equals '=')} {(DQ (z--no-checkout))} ) (C {(git)} {(update-ref)} {(--no-deref)} {(BISECT_HEAD)} {(DQ ($ VSub_DollarName '$start_head'))} ) ] ) ] ) (command.Simple words: [{(git)} {(rev-parse)} {(--sq-quote)} {(DQ ($ VSub_At '$@'))}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_NAMES))} ) ] ) (C {(eval)} {(DQ ($ VSub_DollarName '$eval') (' true'))}) (command.If arms: [ (if_arm cond: [(C {(test)} {($ VSub_DollarName '$must_write_terms')} {(-eq)} {(1)})] action: [ (C {(write_terms)} {(DQ ($ VSub_DollarName '$TERM_BAD'))} {(DQ ($ VSub_DollarName '$TERM_GOOD'))} ) ] ) ] ) (command.Simple words: [{(echo)} {(DQ ('git bisect start') ($ VSub_DollarName '$orig_args'))}] redirects: [ (redir.Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))} ) ] ) (command.ControlFlow token:<ControlFlow_Exit exit>) ] ) (C {(bisect_auto_next)}) (C {(trap)} {(SQ <->)} {(0)}) ] ) ) (command.ShFunction name: bisect_write body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:state) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rev) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:nolog) op: Equal rhs: {(DQ ($ VSub_Number '$3'))} ) ] ) (command.Case to_match: {(DQ ($ VSub_DollarName '$state'))} arms: [ (case_arm pat_list: [{(DQ ($ VSub_DollarName '$TERM_BAD'))}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tag) op: Equal rhs: {(DQ ($ VSub_DollarName '$state'))} ) ] ) ] ) (case_arm pat_list: [{(DQ ($ VSub_DollarName '$TERM_GOOD'))} {(skip)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tag) op: Equal rhs: {(DQ ($ VSub_DollarName '$state')) (-) (DQ ($ VSub_DollarName '$rev'))} ) ] ) ] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ('Bad bisect_write argument: ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) (state) ) } ) ] ) ) ) } ) ] ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(git)} {(update-ref)} {(DQ (refs/bisect/) ($ VSub_DollarName '$tag'))} {(DQ ($ VSub_DollarName '$rev'))} ) (command.ControlFlow token:<ControlFlow_Exit exit>) ] ) (command.Simple words: [ {(echo)} { (DQ ('# ') ($ VSub_DollarName '$state') (': ') (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(git)} {(show-branch)} {($ VSub_DollarName '$rev')})] ) ) ) } ] redirects: [ (redir.Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))} ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-n)} {(DQ ($ VSub_DollarName '$nolog'))}) (command.Simple words: [ {(echo)} { (DQ ('git bisect ') ($ VSub_DollarName '$state') (' ') ($ VSub_DollarName '$rev')) } ] redirects: [ (redir.Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))} ) ] ) ] ) ] ) ) (command.ShFunction name: is_expected_rev body: (command.BraceGroup children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_EXPECTED_REV))}) (C {(test)} {(DQ ($ VSub_Number '$1'))} {(Lit_Equals '=')} { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(cat)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_EXPECTED_REV))}) ] ) ) } ) ] ) ] ) ) (command.ShFunction name: check_expected_revs body: (command.BraceGroup children: [ (command.ForEach iter_name: _rev iter_words: [{(DQ ($ VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [(C {(is_expected_rev)} {(DQ ($ VSub_DollarName '$_rev'))})] negated: T ) ] action: [ (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_ANCESTORS_OK))}) (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_EXPECTED_REV))}) (command.ControlFlow token: <ControlFlow_Return return> ) ] ) ] ) ] ) ) ] ) ) (command.ShFunction name: bisect_skip body: (command.BraceGroup children: [ (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:all) op:Equal rhs:{(SQ )})] ) (command.ForEach iter_name: arg iter_words: [{(DQ ($ VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ VSub_DollarName '$arg'))} arms: [ (case_arm pat_list: [{(Lit_Star '*') (..) (Lit_Star '*')}] action: [ (command.AndOr ops: [Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:revs) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(rev-list)} {(DQ ($ VSub_DollarName '$arg'))} ) ] ) ) } ) ] ) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ('Bad rev input: ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) (arg) ) } ) ] ) ) ) } ) ] ) ] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:revs) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {(--sq-quote)} {(DQ ($ VSub_DollarName '$arg'))} ) ] ) ) } ) ] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:all) op: Equal rhs: {(DQ ($ VSub_DollarName '$all') (' ') ($ VSub_DollarName '$revs'))} ) ] ) ] ) ) (C {(eval)} {(bisect_state)} {(SQ <skip>)} {($ VSub_DollarName '$all')}) ] ) ) (command.ShFunction name: bisect_state body: (command.BraceGroup children: [ (C {(bisect_autostart)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:state) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (C {(check_and_set_terms)} {($ VSub_DollarName '$state')}) (command.Case to_match: {(DQ ($ VSub_Pound '$#') (',') ($ VSub_DollarName '$state'))} arms: [ (case_arm pat_list: [{(0) (Lit_Comma ',') (Lit_Star '*')}] action: [(C {(die)} {(DQ ("Please call 'bisect_state' with at least one argument."))})] ) (case_arm pat_list: [ {(1) (Lit_Comma ',') (DQ ($ VSub_DollarName '$TERM_BAD'))} {(1) (Lit_Comma ',') (DQ ($ VSub_DollarName '$TERM_GOOD'))} {(1) (Lit_Comma ',') (skip)} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bisected_head) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children:[(C {(bisect_head)})]) ) } ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rev) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {(--verify)} {(DQ ($ VSub_DollarName '$bisected_head'))} ) ] ) ) } ) ] ) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ('Bad rev input: ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) (bisected_head) ) } ) ] ) ) ) } ) ] ) (C {(bisect_write)} {(DQ ($ VSub_DollarName '$state'))} {(DQ ($ VSub_DollarName '$rev'))} ) (C {(check_expected_revs)} {(DQ ($ VSub_DollarName '$rev'))}) ] ) (case_arm pat_list: [ {(2) (Lit_Comma ',') (DQ ($ VSub_DollarName '$TERM_BAD'))} {(Lit_Star '*') (Lit_Comma ',') (DQ ($ VSub_DollarName '$TERM_GOOD'))} {(Lit_Star '*') (Lit_Comma ',') (skip)} ] action: [ (C {(shift)}) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:hash_list) op:Equal rhs:{(SQ )})] ) (command.ForEach iter_name: rev iter_words: [{(DQ ($ VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sha) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {(--verify)} {(DQ ($ VSub_DollarName '$rev') ('^{commit}'))} ) ] ) ) } ) ] ) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ('Bad rev input: ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) (rev) ) } ) ] ) ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:hash_list) op: Equal rhs: { (DQ ($ VSub_DollarName '$hash_list') (' ') ($ VSub_DollarName '$sha') ) } ) ] ) ] ) ) (command.ForEach iter_name: rev iter_words: [{($ VSub_DollarName '$hash_list')}] do_arg_iter: F body: (command.DoGroup children: [ (C {(bisect_write)} {(DQ ($ VSub_DollarName '$state'))} {(DQ ($ VSub_DollarName '$rev'))} ) ] ) ) (C {(check_expected_revs)} {($ VSub_DollarName '$hash_list')}) ] ) (case_arm pat_list: [{(Lit_Star '*') (Lit_Comma ',') (DQ ($ VSub_DollarName '$TERM_BAD'))}] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("'git bisect ") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("TERM_BAD' can take only one argument.") ) } ) ] ) ) ) } ) ] ) (case_arm pat_list:[{(Lit_Star '*')}] action:[(C {(usage)})]) ] ) (C {(bisect_auto_next)}) ] ) ) (command.ShFunction name: bisect_next_check body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs:(sh_lhs_expr.Name name:missing_good) op:Equal rhs:(word.Empty)) (assign_pair lhs:(sh_lhs_expr.Name name:missing_bad) op:Equal rhs:(word.Empty)) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(git)} {(show-ref)} {(-q)} {(--verify)} {(refs/bisect/) ($ VSub_DollarName '$TERM_BAD')} ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:missing_bad) op:Equal rhs:{(t)})] ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-n)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(for-each-ref)} {(DQ (refs/bisect/) ($ VSub_DollarName '$TERM_GOOD') ('-*'))} ) ] ) ) ) } ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:missing_good) op:Equal rhs:{(t)})] ) ] ) (command.Case to_match: { (DQ ($ VSub_DollarName '$missing_good') (',') ($ VSub_DollarName '$missing_bad') (',') ($ VSub_Number '$1') ) } arms: [ (case_arm pat_list: [{(Lit_Comma ',') (Lit_Comma ',') (Lit_Star '*')}] action: [ (C {(Lit_Other ':')} {(have)} {(both)} {($ VSub_DollarName '$TERM_GOOD')} {(and)} {($ VSub_DollarName '$TERM_BAD')} {(-)} {(ok)} ) ] ) (case_arm pat_list: [{(Lit_Star '*') (Lit_Comma ',')}] action: [(C {(false)})] ) (case_arm pat_list: [ {(t) (Lit_Comma ',') (Lit_Comma ',') (DQ ($ VSub_DollarName '$TERM_GOOD'))} ] action: [ (command.Simple words: [ {(eval_gettextln)} { (DQ ('Warning: bisecting only with a ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ('TERM_BAD commit.') ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-t)} {(0)})] action: [ (command.Simple words: [{(gettext)} {(DQ ('Are you sure [Y/n]? '))}] redirects: [ (redir.Redir op: <Redir_GreatAnd '>&'> fd: 16777215 arg_word: {(2)} ) ] ) (C {(read)} {(yesno)}) (command.Case to_match: {(DQ ($ VSub_DollarName '$yesno'))} arms: [ (case_arm pat_list: [ {(Lit_LBracket '[') (Nn) (Lit_RBracket ']') (Lit_Star '*')} ] action: [ (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) ] ) ] ) ] ) (C {(Lit_Other ':')} {(bisect)} {(without)} {($ VSub_DollarName '$TERM_GOOD') (...)}) ] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bad_syn) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(bisect_voc)} {(bad)})] ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:good_syn) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(bisect_voc)} {(good)})] ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_START))}) ] action: [ (command.Simple words: [ {(eval_gettextln)} { (DQ ('You need to give me at least one ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ('bad_syn and one ') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) ('good_syn revision.\n') ('(You can use ') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\"'>) ('git bisect ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) (bad_syn) (word_part.EscapedLiteral token:<Lit_EscapedChar '\\"'>) (' and ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\"'> ) ('git bisect ') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) (good_syn) (word_part.EscapedLiteral token: <Lit_EscapedChar '\\"'> ) (' for that.)') ) } ] redirects: [ (redir.Redir op: <Redir_GreatAnd '>&'> fd: 16777215 arg_word: {(2)} ) ] ) ] ) ] else_action: [ (command.Simple words: [ {(eval_gettextln)} { (DQ ('You need to start by ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\"'> ) ('git bisect start') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\"'>) ('.\n') ('You then need to give me at least one ') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) ('good_syn and one ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ('bad_syn revision.\n') ('(You can use ') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\"'>) ('git bisect ') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) (bad_syn) (word_part.EscapedLiteral token: <Lit_EscapedChar '\\"'> ) (' and ') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\"'>) ('git bisect ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) (good_syn) (word_part.EscapedLiteral token:<Lit_EscapedChar '\\"'>) (' for that.)') ) } ] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) ] ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] ) ] ) ] ) ) (command.ShFunction name: bisect_auto_next body: (command.BraceGroup children: [ (command.AndOr ops: [Op_DAmp Op_DPipe] children: [(C {(bisect_next_check)}) (C {(bisect_next)}) (C {(Lit_Other ':')})] ) ] ) ) (command.ShFunction name: bisect_next body: (command.BraceGroup children: [ (command.Case to_match: {(DQ ($ VSub_Pound '$#'))} arms: [ (case_arm pat_list:[{(0)}]) (case_arm pat_list:[{(Lit_Star '*')}] action:[(C {(usage)})]) ] ) (C {(bisect_autostart)}) (C {(bisect_next_check)} {($ VSub_DollarName '$TERM_GOOD')}) (C {(git)} {(bisect--helper)} {(--next-all)} { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_HEAD))}) (C {(echo)} {(--no-checkout)}) ] ) ] ) ) } ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:res) op:Equal rhs:{($ VSub_QMark '$?')})] ) (command.If arms: [ (if_arm cond: [(C {(test)} {($ VSub_DollarName '$res')} {(-eq)} {(10)})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bad_rev) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(show-ref)} {(--hash)} {(--verify)} {(refs/bisect/) ($ VSub_DollarName '$TERM_BAD')} ) ] ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bad_commit) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(show-branch)} {($ VSub_DollarName '$bad_rev')}) ] ) ) } ) ] ) (command.Simple words: [ {(echo)} { (DQ ('# first ') ($ VSub_DollarName '$TERM_BAD') (' commit: ') ($ VSub_DollarName '$bad_commit') ) } ] redirects: [ (redir.Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))} ) ] ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {(0)} ) ] ) (if_arm cond: [(C {(test)} {($ VSub_DollarName '$res')} {(-eq)} {(2)})] action: [ (command.Simple words: [{(echo)} {(DQ ('# only skipped commits left to test'))}] redirects: [ (redir.Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:good_revs) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(for-each-ref)} {(--format) (Lit_Equals '=') (DQ ('%(objectname)'))} {(DQ (refs/bisect/) ($ VSub_DollarName '$TERM_GOOD') ('-*'))} ) ] ) ) } ) ] ) (command.ForEach iter_name: skipped iter_words: [ { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(rev-list)} {(refs/bisect/) ($ VSub_DollarName '$TERM_BAD')} {(--not)} {($ VSub_DollarName '$good_revs')} ) ] ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skipped_commit) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(git)} {(show-branch)} {($ VSub_DollarName '$skipped')} ) ] ) ) } ) ] ) (command.Simple words: [ {(echo)} { (DQ ('# possible first ') ($ VSub_DollarName '$TERM_BAD') (' commit: ') ($ VSub_DollarName '$skipped_commit') ) } ] redirects: [ (redir.Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))} ) ] ) ] ) ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {($ VSub_DollarName '$res')} ) ] ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (C {(test)} {($ VSub_DollarName '$res')} {(-ne)} {(0)}) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {($ VSub_DollarName '$res')} ) ] ) (command.ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) ) (command.ShFunction name: bisect_visualize body: (command.BraceGroup children: [ (C {(bisect_next_check)} {(fail)}) (command.If arms: [ (if_arm cond: [(C {(test)} {($ VSub_Pound '$#')} {(Lit_Equals '=')} {(0)})] action: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-n)} { (DQ (braced_var_sub token: <VSub_Name DISPLAY> suffix_op: (suffix_op.Unary op_id:VTest_Plus arg_word:{(set)}) ) (braced_var_sub token: <VSub_Name SESSIONNAME> suffix_op: (suffix_op.Unary op_id:VTest_Plus arg_word:{(set)}) ) (braced_var_sub token:<VSub_Name MSYSTEM> suffix_op:(suffix_op.Unary op_id:VTest_Plus arg_word:{(set)})) (braced_var_sub token: <VSub_Name SECURITYSESSIONID> suffix_op: (suffix_op.Unary op_id:VTest_Plus arg_word:{(set)}) ) ) } ) (command.Simple words: [{(type)} {(gitk)}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(/dev/null)} ) (redir.Redir op: <Redir_GreatAnd '2>&'> fd: 2 arg_word: {(1)} ) ] ) ] ) ] action: [(C {(KW_Set set)} {(gitk)})] ) ] else_action: [(C {(KW_Set set)} {(git)} {(log)})] ) ] ) ] else_action: [ (command.Case to_match: {(DQ ($ VSub_Number '$1'))} arms: [ (case_arm pat_list:[{(git) (Lit_Star '*')} {(tig)}]) (case_arm pat_list: [{(-) (Lit_Star '*')}] action: [(C {(KW_Set set)} {(git)} {(log)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [(C {(KW_Set set)} {(git)} {(DQ ($ VSub_At '$@'))})] ) ] ) ] ) (C {(eval)} {(SQ <'"$@"'>)} {(--bisect)} {(--)} { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(cat)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_NAMES))})] ) ) } ) ] ) ) (command.ShFunction name: bisect_reset body: (command.BraceGroup children: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_START))}) (command.BraceGroup children: [ (C {(gettextln)} {(DQ ('We are not bisecting.'))}) (command.ControlFlow token:<ControlFlow_Return return>) ] ) ] ) (command.Case to_match: {(DQ ($ VSub_Pound '$#'))} arms: [ (case_arm pat_list: [{(0)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:branch) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(cat)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_START))}) ] ) ) } ) ] ) ] ) (case_arm pat_list: [{(1)}] action: [ (command.AndOr ops: [Op_DPipe] children: [ (command.Simple words: [ {(git)} {(rev-parse)} {(--quiet)} {(--verify)} {(DQ ($ VSub_Number '$1') ('^{commit}'))} ] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:invalid) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("'") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("invalid' is not a valid commit") ) } ) ] ) ) ) } ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:branch) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) ] ) (case_arm pat_list:[{(Lit_Star '*')}] action:[(C {(usage)})]) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Op_DAmp] children: [ (command.Pipeline children: [ (C {(test)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_HEAD))}) ] negated: T ) (command.Pipeline children: [ (C {(git)} {(checkout)} {(DQ ($ VSub_DollarName '$branch'))} {(--)}) ] negated: T ) ] ) ] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("Could not check out original HEAD '") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("branch'.\n") ("Try 'git bisect reset <commit>'.") ) } ) ] ) ) ) } ) ] ) ] ) (C {(bisect_clean_state)}) ] ) ) (command.ShFunction name: bisect_clean_state body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(git)} {(for-each-ref)} {(--format) (Lit_Equals '=') (SQ <'%(refname) %(objectname)'>)} {(refs/bisect/) (word_part.EscapedLiteral token:<Lit_EscapedChar '\\*'>)} ) (command.WhileUntil keyword: <KW_While while> cond: [(C {(read)} {(ref)} {(hash)})] body: (command.DoGroup children: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(git)} {(update-ref)} {(-d)} {($ VSub_DollarName '$ref')} {($ VSub_DollarName '$hash')} ) (command.ControlFlow token: <ControlFlow_Exit exit> ) ] ) ] ) ) ] negated: F ) (command.AndOr ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp] children: [ (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_EXPECTED_REV))}) (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_ANCESTORS_OK))}) (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))}) (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_NAMES))}) (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_RUN))}) (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_TERMS))}) (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/head-name))}) (C {(git)} {(update-ref)} {(-d)} {(--no-deref)} {(BISECT_HEAD)}) (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_START))}) ] ) ] ) ) (command.ShFunction name: bisect_replay body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(DQ ($ VSub_Pound '$#'))} {(-eq)} {(1)}) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(gettext)} {(DQ ('No logfile given'))})] ) ) ) } ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-r)} {(DQ ($ VSub_DollarName '$file'))}) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ('cannot read ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ('file for replaying') ) } ) ] ) ) ) } ) ] ) (C {(bisect_reset)}) (command.WhileUntil keyword: <KW_While while> cond: [(C {(read)} {(git)} {(bisect)} {(command)} {(rev)})] body: (command.DoGroup children: [ (command.AndOr ops: [Op_DPipe Op_DPipe] children: [ (C {(test)} {(DQ ($ VSub_DollarName '$git') (' ') ($ VSub_DollarName '$bisect'))} {(Lit_Equals '=')} {(DQ ('git bisect'))} ) (C {(test)} {(DQ ($ VSub_DollarName '$git'))} {(Lit_Equals '=')} {(DQ (git-bisect))} ) (command.ControlFlow token: <ControlFlow_Continue continue> ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_DollarName '$git'))} {(Lit_Equals '=')} {(DQ (git-bisect))} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rev) op: Equal rhs: {(DQ ($ VSub_DollarName '$command'))} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:command) op: Equal rhs: {(DQ ($ VSub_DollarName '$bisect'))} ) ] ) ] ) ] ) (C {(get_terms)}) (C {(check_and_set_terms)} {(DQ ($ VSub_DollarName '$command'))}) (command.Case to_match: {(DQ ($ VSub_DollarName '$command'))} arms: [ (case_arm pat_list: [{(start)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cmd) op: Equal rhs: {(DQ ('bisect_start ') ($ VSub_DollarName '$rev'))} ) ] ) (C {(eval)} {(DQ ($ VSub_DollarName '$cmd'))}) ] ) (case_arm pat_list: [ {(DQ ($ VSub_DollarName '$TERM_GOOD'))} {(DQ ($ VSub_DollarName '$TERM_BAD'))} {(skip)} ] action: [ (C {(bisect_write)} {(DQ ($ VSub_DollarName '$command'))} {(DQ ($ VSub_DollarName '$rev'))} ) ] ) (case_arm pat_list: [{(terms)}] action: [(C {(bisect_terms)} {($ VSub_DollarName '$rev')})] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(gettext)} {(DQ ('?? what are you talking about?'))}) ] ) ) ) } ) ] ) ] ) ] ) redirects: [ (redir.Redir op: <Redir_Less '<'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$file'))} ) ] ) (C {(bisect_auto_next)}) ] ) ) (command.ShFunction name: bisect_run body: (command.BraceGroup children: [ (C {(bisect_next_check)} {(fail)}) (command.WhileUntil keyword: <KW_While while> cond: [(C {(true)})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:command) op: Equal rhs: {(DQ ($ VSub_At '$@'))} ) ] ) (C {(eval_gettextln)} { (DQ ('running ') (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) (command) ) } ) (C {(DQ ($ VSub_At '$@'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:res) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Lit_LBracket '[')} {($ VSub_DollarName '$res')} {(-lt)} {(0)} {(-o)} {($ VSub_DollarName '$res')} {(-ge)} {(128)} {(Lit_RBracket ']')} ) ] action: [ (command.Simple words: [ {(eval_gettextln)} { (DQ ('bisect run failed:\n') ('exit code ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("res from '") (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) ("command' is < 0 or >= 128") ) } ] redirects: [ (redir.Redir op: <Redir_GreatAnd '>&'> fd: 16777215 arg_word: {(2)} ) ] ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {($ VSub_DollarName '$res')} ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Lit_LBracket '[')} {($ VSub_DollarName '$res')} {(-eq)} {(125)} {(Lit_RBracket ']')} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:state) op: Equal rhs: {(SQ <skip>)} ) ] ) ] ) (if_arm cond: [ (C {(Lit_LBracket '[')} {($ VSub_DollarName '$res')} {(-gt)} {(0)} {(Lit_RBracket ']')} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:state) op: Equal rhs: {(DQ ($ VSub_DollarName '$TERM_BAD'))} ) ] ) ] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:state) op: Equal rhs: {(DQ ($ VSub_DollarName '$TERM_GOOD'))} ) ] ) ] ) (command.Subshell command_list: (command.CommandList children: [ (command.Simple words: [{(bisect_state)} {($ VSub_DollarName '$state')}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_RUN))} ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:res) op: Equal rhs: {($ VSub_QMark '$?')} ) ] ) (C {(cat)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_RUN))}) (command.If arms: [ (if_arm cond: [ (command.Simple words: [ {(sane_grep)} { (DQ ('first ') ($ VSub_DollarName '$TERM_BAD') (' commit could be any of') ) } {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_RUN))} ] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) ] action: [ (command.Simple words: [{(gettextln)} {(DQ ('bisect run cannot continue any more'))}] redirects: [ (redir.Redir op: <Redir_GreatAnd '>&'> fd: 16777215 arg_word: {(2)} ) ] ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {($ VSub_DollarName '$res')} ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Lit_LBracket '[')} {($ VSub_DollarName '$res')} {(-ne)} {(0)} {(Lit_RBracket ']')} ) ] action: [ (command.Simple words: [ {(eval_gettextln)} { (DQ ('bisect run failed:\n') ("'bisect_state ") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("state' exited with error code ") (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) (res) ) } ] redirects: [ (redir.Redir op: <Redir_GreatAnd '>&'> fd: 16777215 arg_word: {(2)} ) ] ) (command.ControlFlow token: <ControlFlow_Exit exit> arg_word: {($ VSub_DollarName '$res')} ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Simple words: [ {(sane_grep)} {(DQ ('is the first ') ($ VSub_DollarName '$TERM_BAD') (' commit'))} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_RUN))} ] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) ] action: [ (C {(gettextln)} {(DQ ('bisect run success'))}) (command.Sentence child: (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)}) terminator: <Op_Semi ';'> ) ] ) ] ) ] ) ) ] ) ) (command.ShFunction name: bisect_log body: (command.BraceGroup children: [ (command.AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))}) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(gettext)} {(DQ ('We are not bisecting.'))})] ) ) ) } ) ] ) (C {(cat)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_LOG))}) ] ) ) (command.ShFunction name: get_terms body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_TERMS))})] action: [ (command.BraceGroup children: [(C {(read)} {(TERM_BAD)}) (C {(read)} {(TERM_GOOD)})] redirects: [ (redir.Redir op: <Redir_Less '<'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_TERMS))} ) ] ) ] ) ] ) ] ) ) (command.ShFunction name: write_terms body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM_BAD) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM_GOOD) op: Equal rhs: {($ VSub_Number '$2')} ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_DollarName '$TERM_BAD'))} {(Lit_Equals '=')} {(DQ ($ VSub_DollarName '$TERM_GOOD'))} ) ] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(gettext)} {(DQ ('please use two different terms'))})] ) ) ) } ) ] ) ] ) (C {(check_term_format)} {(DQ ($ VSub_DollarName '$TERM_BAD'))} {(bad)}) (C {(check_term_format)} {(DQ ($ VSub_DollarName '$TERM_GOOD'))} {(good)}) (command.Simple words: [ {(printf)} {(SQ <'%s\\n%s\\n'>)} {(DQ ($ VSub_DollarName '$TERM_BAD'))} {(DQ ($ VSub_DollarName '$TERM_GOOD'))} ] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_TERMS))} ) ] ) ] ) ) (command.ShFunction name: check_term_format body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:term) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(git)} {(check-ref-format)} {(refs/bisect/) (DQ ($ VSub_DollarName '$term'))}) (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("'") (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) ("term' is not a valid term") ) } ) ] ) ) ) } ) ] ) (command.Case to_match: {(DQ ($ VSub_DollarName '$term'))} arms: [ (case_arm pat_list: [ {(help)} {(start)} {(terms)} {(skip)} {(next)} {(reset)} {(visualize)} {(replay)} {(log)} {(run)} ] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("can't use the builtin command '") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("term' as a term") ) } ) ] ) ) ) } ) ] ) (case_arm pat_list: [{(bad)} {(new)}] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_Number '$2'))} {(KW_Bang '!') (Lit_Equals '=')} {(bad)} ) ] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("can't change the meaning of term '") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("term'") ) } ) ] ) ) ) } ) ] ) ] ) ] ) (case_arm pat_list: [{(good)} {(old)}] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_Number '$2'))} {(KW_Bang '!') (Lit_Equals '=')} {(good)} ) ] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("can't change the meaning of term '") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("term'") ) } ) ] ) ) ) } ) ] ) ] ) ] ) ] ) ] ) ) (command.ShFunction name: check_and_set_terms body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cmd) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) (command.Case to_match: {(DQ ($ VSub_DollarName '$cmd'))} arms: [ (case_arm pat_list:[{(skip)} {(start)} {(terms)}]) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Op_DAmp Op_DAmp] children: [ (C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_TERMS))}) (C {(test)} {(DQ ($ VSub_DollarName '$cmd'))} {(KW_Bang '!') (Lit_Equals '=')} {(DQ ($ VSub_DollarName '$TERM_BAD'))} ) (C {(test)} {(DQ ($ VSub_DollarName '$cmd'))} {(KW_Bang '!') (Lit_Equals '=')} {(DQ ($ VSub_DollarName '$TERM_GOOD'))} ) ] ) ] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ("Invalid command: you're currently in a ") (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) (TERM_BAD/) (word_part.EscapedLiteral token:<Lit_EscapedChar '\\$'>) ('TERM_GOOD bisect.') ) } ) ] ) ) ) } ) ] ) ] ) (command.Case to_match: {(DQ ($ VSub_DollarName '$cmd'))} arms: [ (case_arm pat_list: [{(bad)} {(good)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_TERMS))} ) ] negated: T ) ] action: [(C {(write_terms)} {(bad)} {(good)})] ) ] ) ] ) (case_arm pat_list: [{(new)} {(old)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_TERMS))} ) ] negated: T ) ] action: [(C {(write_terms)} {(new)} {(old)})] ) ] ) ] ) ] ) ] ) ] ) ] ) ) (command.ShFunction name: bisect_voc body: (command.BraceGroup children: [ (command.Case to_match: {(DQ ($ VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(bad)}] action: [(C {(echo)} {(DQ ('bad|new'))})] ) (case_arm pat_list: [{(good)}] action: [(C {(echo)} {(DQ ('good|old'))})] ) ] ) ] ) ) (command.ShFunction name: bisect_terms body: (command.BraceGroup children: [ (C {(get_terms)}) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {(test)} {(-s)} {(DQ ($ VSub_DollarName '$GIT_DIR') (/BISECT_TERMS))}) ] negated: T ) ] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [(C {(gettext)} {(DQ ('no terms defined'))})] ) ) ) } ) ] ) ] ) (command.Case to_match: {(DQ ($ VSub_Pound '$#'))} arms: [ (case_arm pat_list: [{(0)}] action: [ (C {(gettextln)} { (DQ ('Your current terms are ') ($ VSub_DollarName '$TERM_GOOD') (' for the old state\n') ('and ') ($ VSub_DollarName '$TERM_BAD') (' for the new state.') ) } ) ] ) (case_arm pat_list: [{(1)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:arg) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (command.Case to_match: {(DQ ($ VSub_DollarName '$arg'))} arms: [ (case_arm pat_list: [{(--term-good)} {(--term-old)}] action: [ (C {(printf)} {(SQ <'%s\\n'>)} {(DQ ($ VSub_DollarName '$TERM_GOOD'))}) ] ) (case_arm pat_list: [{(--term-bad)} {(--term-new)}] action: [ (C {(printf)} {(SQ <'%s\\n'>)} {(DQ ($ VSub_DollarName '$TERM_BAD'))}) ] ) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (C {(die)} { (DQ (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(eval_gettext)} { (DQ ('invalid argument ') (word_part.EscapedLiteral token: <Lit_EscapedChar '\\$'> ) ("arg for 'git bisect terms'.\n") ( 'Supported options are: --term-good|--term-old and --term-bad|--term-new.' ) ) } ) ] ) ) ) } ) ] ) ] ) ] ) (case_arm pat_list:[{(Lit_Star '*')}] action:[(C {(usage)})]) ] ) ] ) ) (command.Case to_match: {(DQ ($ VSub_Pound '$#'))} arms: [ (case_arm pat_list:[{(0)}] action:[(C {(usage)})]) (case_arm pat_list: [{(Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cmd) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} ) ] ) (C {(get_terms)}) (C {(shift)}) (command.Case to_match: {(DQ ($ VSub_DollarName '$cmd'))} arms: [ (case_arm pat_list:[{(help)}] action:[(C {(git)} {(bisect)} {(-h)})]) (case_arm pat_list: [{(start)}] action: [(C {(bisect_start)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list: [ {(bad)} {(good)} {(new)} {(old)} {(DQ ($ VSub_DollarName '$TERM_BAD'))} {(DQ ($ VSub_DollarName '$TERM_GOOD'))} ] action: [ (C {(bisect_state)} {(DQ ($ VSub_DollarName '$cmd'))} {(DQ ($ VSub_At '$@'))}) ] ) (case_arm pat_list: [{(skip)}] action: [(C {(bisect_skip)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list: [{(next)}] action: [(C {(bisect_next)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list: [{(visualize)} {(view)}] action: [(C {(bisect_visualize)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list: [{(reset)}] action: [(C {(bisect_reset)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list: [{(replay)}] action: [(C {(bisect_replay)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list:[{(log)}] action:[(C {(bisect_log)})]) (case_arm pat_list: [{(run)}] action: [(C {(bisect_run)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list: [{(terms)}] action: [(C {(bisect_terms)} {(DQ ($ VSub_At '$@'))})] ) (case_arm pat_list:[{(Lit_Star '*')}] action:[(C {(usage)})]) ] ) ] ) ] ) ] )