(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'USAGE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'USAGE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'USAGE='> name:USAGE) op: assign_op.Equal rhs: {(SQ <'[help|start|bad|good|new|old|terms|skip|next|reset|visualize|replay|log|run]'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LONG_USAGE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LONG_USAGE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LONG_USAGE='> name:LONG_USAGE) op: assign_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.'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OPTIONS_SPEC='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OPTIONS_SPEC='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTIONS_SPEC='> name:OPTIONS_SPEC) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {<git-sh-setup>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike '_x40='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_x40='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_x40='> name:_x40) op: assign_op.Equal rhs: {(SQ <'[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike '_x40='> pairs: [ (AssignPair left: <Id.Lit_VarLike '_x40='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_x40='> name:_x40) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TERM_BAD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TERM_BAD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TERM_BAD='> name:TERM_BAD) op: assign_op.Equal rhs: {<bad>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TERM_GOOD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TERM_GOOD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TERM_GOOD='> name:TERM_GOOD) op: assign_op.Equal rhs: {<good>} ) ] redirects: [] ) (command.ShFunction name_tok: <bisect_head> name: bisect_head body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_HEAD'>)}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<BISECT_HEAD>}] redirects: [] do_fork: T ) ] spids: [81 93] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<HEAD>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_autostart> name: bisect_autostart body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} { (DQ <'You need to start by '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'git bisect start'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-t>} {<0>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'Do you want me to do it for you [Y/n]? '>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<yesno>}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName yesno))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_LBracket '['> pattern: (pat.Words words: [ {<Id.Lit_LBracket '['> <Nn> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [(command.ControlFlow keyword:<Id.ControlFlow_Exit exit>)] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <bisect_start> more_env: [] words: [{<bisect_start>}] redirects: [] do_fork: T ) ] spids: [148 157] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_start> name: bisect_start body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'has_double_dash='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'has_double_dash='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'has_double_dash='> name: has_double_dash ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [arg] iterable: (for_iter__Args) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName arg))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <--> pattern: (pat.Words words:[{<-->}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'has_double_dash='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'has_double_dash='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'has_double_dash='> name: has_double_dash ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'orig_args='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'orig_args='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'orig_args='> name:orig_args) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--sq-quote>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'bad_seen='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'bad_seen='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bad_seen='> name:bad_seen) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'eval='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'eval='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'eval='> name:eval) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'must_write_terms='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'must_write_terms='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'must_write_terms='> name: must_write_terms ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'revs='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'revs='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'revs='> name:revs) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ <z> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--is-bare-repository>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<zfalse>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'mode='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'mode='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'mode='> name:mode) op: assign_op.Equal rhs: {<--no-checkout>} ) ] redirects: [] ) ] spids: [318 339] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'mode='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'mode='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'mode='> name:mode) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'arg='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'arg='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName arg))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <--> pattern: (pat.Words words:[{<-->}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--no-checkout> pattern: (pat.Words words:[{<--no-checkout>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'mode='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'mode='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'mode='> name:mode) op: assign_op.Equal rhs: {<--no-checkout>} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--term-good> pattern: (pat.Words words:[{<--term-good>} {<--term-old>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'must_write_terms='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'must_write_terms='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'must_write_terms='> name: must_write_terms ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TERM_GOOD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TERM_GOOD='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TERM_GOOD='> name: TERM_GOOD ) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--term-good> pattern: (pat.Words words: [ {<--term-good> <Id.Lit_Equals '='> <Id.Lit_Star '*'>} {<--term-old> <Id.Lit_Equals '='> <Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'must_write_terms='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'must_write_terms='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'must_write_terms='> name: must_write_terms ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TERM_GOOD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TERM_GOOD='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TERM_GOOD='> name: TERM_GOOD ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 1> var_name: 1 suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '*'> <'='>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--term-bad> pattern: (pat.Words words:[{<--term-bad>} {<--term-new>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'must_write_terms='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'must_write_terms='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'must_write_terms='> name: must_write_terms ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TERM_BAD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TERM_BAD='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TERM_BAD='> name: TERM_BAD ) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--term-bad> pattern: (pat.Words words: [ {<--term-bad> <Id.Lit_Equals '='> <Id.Lit_Star '*'>} {<--term-new> <Id.Lit_Equals '='> <Id.Lit_Star '*'>} ] ) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'must_write_terms='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'must_write_terms='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'must_write_terms='> name: must_write_terms ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TERM_BAD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TERM_BAD='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'TERM_BAD='> name: TERM_BAD ) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 1> var_name: 1 suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '*'> <'='>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--> pattern: (pat.Words words:[{<--> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'unrecognised option: \''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'arg\''> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'rev='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rev='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev='> name:rev) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-parse>} {<-q>} {<--verify>} {(DQ ($ Id.VSub_DollarName arg) <'^{commit}'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {($ Id.VSub_DollarName has_double_dash)} {<-eq>} {<1>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'\''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'arg\' does not appear to be a valid revision'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ControlFlow keyword: <Id.ControlFlow_Break break> ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'revs='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'revs='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'revs='> name:revs) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName revs) <' '> ($ Id.VSub_DollarName rev)) } ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [rev] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName revs)}]) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'must_write_terms='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'must_write_terms='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'must_write_terms='> name: must_write_terms ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName bad_seen)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'state='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'state='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'state='> name: state ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName TERM_BAD)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'bad_seen='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'bad_seen='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'bad_seen='> name: bad_seen ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'state='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'state='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state) op: assign_op.Equal rhs: {($ Id.VSub_DollarName TERM_GOOD)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'eval='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'eval='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'eval='> name:eval) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName eval) <' bisect_write \''> ($ Id.VSub_DollarName state) <'\' \''> ($ Id.VSub_DollarName rev) <'\' \'nolog\' &&'> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'head='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'head='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'head='> name:head) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [ (EnvPair left: <Id.Lit_VarLike 'GIT_DIR='> name: GIT_DIR val: {(DQ ($ Id.VSub_DollarName GIT_DIR))} ) ] words: [{<git>} {<symbolic-ref>} {<-q>} {<HEAD>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'head='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'head='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'head='> name:head) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [ (EnvPair left: <Id.Lit_VarLike 'GIT_DIR='> name: GIT_DIR val: {(DQ ($ Id.VSub_DollarName GIT_DIR))} ) ] words: [{<git>} {<rev-parse>} {<--verify>} {<HEAD>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'Bad HEAD - I need a HEAD'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _> <Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'start_head='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'start_head='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'start_head='> name:start_head) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'start_head='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'start_head='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'start_head='> name:start_head) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ <z> ($ Id.VSub_DollarName mode))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <z--no-checkout>)} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<checkout>} {(DQ ($ Id.VSub_DollarName start_head))} {<-->} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'Checking out \''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'start_head\' failed. Try \'git bisect reset <valid-branch>\'.'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [809 826] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [779 791] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName head))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <'refs/heads/'> pattern: (pat.Words words: [{<'refs/heads/'> <Id.Lit_Star '*'>} {($ Id.VSub_DollarName _x40)}] ) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/head-name'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <gettext> more_env: [] words: [ {<gettext>} {(DQ <'won\'t bisect on cg-seek\'ed tree'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'start_head='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'start_head='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'start_head='> name: start_head ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name head> var_name: head suffix_op: (suffix_op.Unary op: <Id.VOp1_Pound '#'> arg_word: {<refs> <Id.Lit_Slash '/'> <heads> <Id.Lit_Slash '/'>} ) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'Bad HEAD - strange symbolic ref'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <bisect_clean_state> more_env: [] words: [{<bisect_clean_state>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <trap> more_env: [] words: [{<trap>} {(SQ <bisect_clean_state>)} {<0>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <trap> more_env: [] words: [{<trap>} {(SQ <'exit 255'>)} {<1>} {<2>} {<3>} {<15>}] redirects: [] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName start_head))}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)} ) ] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ <z> ($ Id.VSub_DollarName mode))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <z--no-checkout>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<update-ref>} {<--no-deref>} {<BISECT_HEAD>} {(DQ ($ Id.VSub_DollarName start_head))} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--sq-quote>} {(DQ ($ Id.VSub_At '@'))}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_NAMES'>)} ) ] do_fork: T ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_DollarName eval) <' true'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {($ Id.VSub_DollarName must_write_terms)} {<-eq>} {<1>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <write_terms> more_env: [] words: [ {<write_terms>} {(DQ ($ Id.VSub_DollarName TERM_BAD))} {(DQ ($ Id.VSub_DollarName TERM_GOOD))} ] redirects: [] do_fork: T ) ] spids: [1131 1142] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'git bisect start'> ($ Id.VSub_DollarName orig_args))}] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)} ) ] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>) ] ops: [ <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DPipe _> ] ) (command.Simple blame_tok: <bisect_auto_next> more_env: [] words: [{<bisect_auto_next>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <trap> more_env: [] words: [{<trap>} {(SQ <->)} {<0>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_write> name: bisect_write body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'state='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'state='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'rev='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rev='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev='> name:rev) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'nolog='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'nolog='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nolog='> name:nolog) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 3))} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName state))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ ($ Id.VSub_DollarName TERM_BAD))}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'tag='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'tag='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tag='> name:tag) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName state))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ ($ Id.VSub_DollarName TERM_GOOD))} {<skip>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'tag='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'tag='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tag='> name:tag) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName state)) <-> (DQ ($ Id.VSub_DollarName rev))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'Bad bisect_write argument: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <state> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<update-ref>} {(DQ <'refs/bisect/'> ($ Id.VSub_DollarName tag))} {(DQ ($ Id.VSub_DollarName rev))} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'# '> ($ Id.VSub_DollarName state) <': '> (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<show-branch>} {($ Id.VSub_DollarName rev)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)} ) ] do_fork: T ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName nolog))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'git bisect '> ($ Id.VSub_DollarName state) <' '> ($ Id.VSub_DollarName rev)) } ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)} ) ] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <is_expected_rev> name: is_expected_rev body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_EXPECTED_REV'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_EXPECTED_REV'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <check_expected_revs> name: check_expected_revs body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [_rev] iterable: (for_iter.Words words:[{(DQ ($ Id.VSub_At '@'))}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <is_expected_rev> more_env: [] words: [{<is_expected_rev>} {(DQ ($ Id.VSub_DollarName _rev))}] redirects: [] do_fork: T ) ] ops: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_ANCESTORS_OK'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_EXPECTED_REV'>)} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] spids: [1426 1437] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_skip> name: bisect_skip body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'all='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'all='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'all='> name:all) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [arg] iterable: (for_iter.Words words:[{(DQ ($ Id.VSub_At '@'))}]) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName arg))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'> <..> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'revs='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'revs='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'revs='> name:revs) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-list>} {(DQ ($ Id.VSub_DollarName arg))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'Bad rev input: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <arg> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'revs='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'revs='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'revs='> name:revs) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-parse>} {<--sq-quote>} {(DQ ($ Id.VSub_DollarName arg))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'all='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'all='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'all='> name:all) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName all) <' '> ($ Id.VSub_DollarName revs))} ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {<bisect_state>} {(SQ <skip>)} {($ Id.VSub_DollarName all)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_state> name: bisect_state body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <bisect_autostart> more_env: [] words: [{<bisect_autostart>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'state='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'state='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Simple blame_tok: <check_and_set_terms> more_env: [] words: [{<check_and_set_terms>} {($ Id.VSub_DollarName state)}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: {(DQ ($ Id.VSub_Pound '#') <','> ($ Id.VSub_DollarName state))} ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0> <Id.Lit_Comma ','> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} {(DQ <'Please call \'bisect_state\' with at least one argument.'>)} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <1> pattern: (pat.Words words: [ {<1> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_BAD))} {<1> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_GOOD))} {<1> <Id.Lit_Comma ','> <skip>} ] ) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'bisected_head='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'bisected_head='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'bisected_head='> name: bisected_head ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <bisect_head> more_env: [] words: [{<bisect_head>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'rev='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rev='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev='> name:rev) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-parse>} {<--verify>} {(DQ ($ Id.VSub_DollarName bisected_head))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'Bad rev input: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <bisected_head> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <bisect_write> more_env: [] words: [ {<bisect_write>} {(DQ ($ Id.VSub_DollarName state))} {(DQ ($ Id.VSub_DollarName rev))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <check_expected_revs> more_env: [] words: [{<check_expected_revs>} {(DQ ($ Id.VSub_DollarName rev))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <2> pattern: (pat.Words words: [ {<2> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_BAD))} {<Id.Lit_Star '*'> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_GOOD))} {<Id.Lit_Star '*'> <Id.Lit_Comma ','> <skip>} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'hash_list='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'hash_list='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'hash_list='> name:hash_list) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [rev] iterable: (for_iter.Words words:[{(DQ ($ Id.VSub_At '@'))}]) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'sha='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sha='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sha='> name:sha) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-parse>} {<--verify>} {(DQ ($ Id.VSub_DollarName rev) <'^{commit}'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'Bad rev input: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <rev> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'hash_list='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'hash_list='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'hash_list='> name: hash_list ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName hash_list) <' '> ($ Id.VSub_DollarName sha) ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [rev] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName hash_list)}]) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <bisect_write> more_env: [] words: [ {<bisect_write>} {(DQ ($ Id.VSub_DollarName state))} {(DQ ($ Id.VSub_DollarName rev))} ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <check_expected_revs> more_env: [] words: [{<check_expected_revs>} {($ Id.VSub_DollarName hash_list)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [ {<Id.Lit_Star '*'> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_BAD))} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'\'git bisect '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'TERM_BAD\' can take only one argument.'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <bisect_auto_next> more_env: [] words: [{<bisect_auto_next>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_next_check> name: bisect_next_check body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'missing_good='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'missing_good='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'missing_good='> name:missing_good) op: assign_op.Equal rhs: (rhs_word__Empty) ) (AssignPair left: <Id.Lit_VarLike 'missing_bad='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'missing_bad='> name:missing_bad) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<show-ref>} {<-q>} {<--verify>} {<'refs/bisect/'> ($ Id.VSub_DollarName TERM_BAD)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'missing_bad='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'missing_bad='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'missing_bad='> name:missing_bad) op: assign_op.Equal rhs: {<t>} ) ] redirects: [] ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-n>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<for-each-ref>} {(DQ <'refs/bisect/'> ($ Id.VSub_DollarName TERM_GOOD) <'-*'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'missing_good='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'missing_good='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'missing_good='> name:missing_good) op: assign_op.Equal rhs: {<t>} ) ] redirects: [] ) ] ops: [<Id.Op_DPipe _>] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: { (DQ ($ Id.VSub_DollarName missing_good) <','> ($ Id.VSub_DollarName missing_bad) <','> ($ Id.VSub_Number 1) ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Comma ','> pattern: (pat.Words words: [{<Id.Lit_Comma ','> <Id.Lit_Comma ','> <Id.Lit_Star '*'>}] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [ {<Id.Lit_Colon ':'>} {<have>} {<both>} {($ Id.VSub_DollarName TERM_GOOD)} {<and>} {($ Id.VSub_DollarName TERM_BAD)} {<->} {<ok>} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'> <Id.Lit_Comma ','>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <false> more_env: [] words: [{<false>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <t> pattern: (pat.Words words: [ {<t> <Id.Lit_Comma ','> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_GOOD))} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <eval_gettextln> more_env: [] words: [ {<eval_gettextln>} { (DQ <'Warning: bisecting only with a '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'TERM_BAD commit.'> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-t>} {<0>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'Are you sure [Y/n]? '>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<yesno>}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName yesno))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_LBracket '['> pattern: (pat.Words words: [ {<Id.Lit_LBracket '['> <Nn> <Id.Lit_RBracket ']'> <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [2004 2013] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [ {<Id.Lit_Colon ':'>} {<bisect>} {<without>} {($ Id.VSub_DollarName TERM_GOOD) <Id.Lit_TDot ...>} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'bad_syn='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'bad_syn='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bad_syn='> name:bad_syn) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <bisect_voc> more_env: [] words: [{<bisect_voc>} {<bad>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'good_syn='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'good_syn='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'good_syn='> name:good_syn) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <bisect_voc> more_env: [] words: [{<bisect_voc>} {<good>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <eval_gettextln> more_env: [] words: [ {<eval_gettextln>} { (DQ <'You need to give me at least one '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'bad_syn and one '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'good_syn revision.\n'> <'(You can use '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'git bisect '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <bad_syn> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' and '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'git bisect '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <good_syn> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <' for that.)'> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] spids: [2102 2114] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <eval_gettextln> more_env: [] words: [ {<eval_gettextln>} { (DQ <'You need to start by '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'git bisect start'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'.\n'> <'You then need to give me at least one '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'good_syn and one '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'bad_syn revision.\n'> <'(You can use '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <'git bisect '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <bad_syn> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <' and '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'git bisect '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <good_syn> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' for that.)'> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_auto_next> name: bisect_auto_next body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <bisect_next_check> more_env: [] words: [{<bisect_next_check>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <bisect_next> more_env: [] words: [{<bisect_next>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_next> name: bisect_next body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Pound '#'))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <bisect_autostart> more_env: [] words: [{<bisect_autostart>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <bisect_next_check> more_env: [] words: [{<bisect_next_check>} {($ Id.VSub_DollarName TERM_GOOD)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<bisect--helper>} {<--next-all>} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_HEAD'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<--no-checkout>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'res='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'res='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {($ Id.VSub_DollarName res)} {<-eq>} {<10>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'bad_rev='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'bad_rev='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bad_rev='> name:bad_rev) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<show-ref>} {<--hash>} {<--verify>} {<'refs/bisect/'> ($ Id.VSub_DollarName TERM_BAD)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'bad_commit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'bad_commit='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bad_commit='> name:bad_commit) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<show-branch>} {($ Id.VSub_DollarName bad_rev)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'# first '> ($ Id.VSub_DollarName TERM_BAD) <' commit: '> ($ Id.VSub_DollarName bad_commit) ) } ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] spids: [2291 2302] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {($ Id.VSub_DollarName res)} {<-eq>} {<2>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'# only skipped commits left to test'>)}] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)} ) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'good_revs='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'good_revs='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'good_revs='> name:good_revs) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<for-each-ref>} {<--format> <Id.Lit_Equals '='> (DQ <'%(objectname)'>)} {(DQ <'refs/bisect/'> ($ Id.VSub_DollarName TERM_GOOD) <'-*'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [skipped] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-list>} {<'refs/bisect/'> ($ Id.VSub_DollarName TERM_BAD)} {<--not>} {($ Id.VSub_DollarName good_revs)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'skipped_commit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'skipped_commit='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'skipped_commit='> name: skipped_commit ) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<show-branch>} {($ Id.VSub_DollarName skipped)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'# possible first '> ($ Id.VSub_DollarName TERM_BAD) <' commit: '> ($ Id.VSub_DollarName skipped_commit) ) } ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)} ) ] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName res)} ) ] spids: [2351 2362] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {($ Id.VSub_DollarName res)} {<-ne>} {<0>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName res)} ) ] ops: [<Id.Op_DAmp _>] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_visualize> name: bisect_visualize body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <bisect_next_check> more_env: [] words: [{<bisect_next_check>} {<fail>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {($ Id.VSub_Pound '#')} {<Id.Lit_Equals '='>} {<0>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-n>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name DISPLAY> var_name: DISPLAY suffix_op: (suffix_op.Unary op: <Id.VTest_Plus _> arg_word: {<set>} ) right: <Id.Right_DollarBrace '}'> ) (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name SESSIONNAME> var_name: SESSIONNAME suffix_op: (suffix_op.Unary op: <Id.VTest_Plus _> arg_word: {<set>} ) right: <Id.Right_DollarBrace '}'> ) (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name MSYSTEM> var_name: MSYSTEM suffix_op: (suffix_op.Unary op: <Id.VTest_Plus _> arg_word: {<set>} ) right: <Id.Right_DollarBrace '}'> ) (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name SECURITYSESSIONID> var_name: SECURITYSESSIONID suffix_op: (suffix_op.Unary op: <Id.VTest_Plus _> arg_word: {<set>} ) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <type> more_env: [] words: [{<type>} {<gitk>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<gitk>}] redirects: [] do_fork: T ) ] spids: [2513 2556] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<git>} {<log>}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [2499 2510] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <git> pattern: (pat.Words words:[{<git> <Id.Lit_Star '*'>} {<tig>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <-> pattern: (pat.Words words:[{<-> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<git>} {<log>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<git>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} {(SQ <'"$@"'>)} {<--bisect>} {<-->} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_NAMES'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_reset> name: bisect_reset body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [{<gettextln>} {(DQ <'We are not bisecting.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Pound '#'))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'branch='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'branch='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'branch='> name:branch) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <cat> more_env: [] words: [ {<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <1> pattern: (pat.Words words:[{<1>}]) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-parse>} {<--quiet>} {<--verify>} {(DQ ($ Id.VSub_Number 1) <'^{commit}'>)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'invalid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'invalid='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'invalid='> name: invalid ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'\''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'invalid\' is not a valid commit'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'branch='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'branch='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'branch='> name:branch) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.AndOr children: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_HEAD'>)} ] redirects: [] do_fork: T ) ] ops: [] ) (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<checkout>} {(DQ ($ Id.VSub_DollarName branch))} {<-->} ] redirects: [] do_fork: T ) ] ops: [] ) ] ops: [<Id.Op_DAmp _>] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'Could not check out original HEAD \''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'branch\'.\n'> <'Try \'git bisect reset <commit>\'.'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] spids: [2786 2814] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <bisect_clean_state> more_env: [] words: [{<bisect_clean_state>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_clean_state> name: bisect_clean_state body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Pipeline children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<for-each-ref>} {<--format> <Id.Lit_Equals '='> (SQ <'%(refname) %(objectname)'>)} {<'refs/bisect/'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\*'> ch: '*' ) } ] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<ref>} {<hash>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<update-ref>} {<-d>} {($ Id.VSub_DollarName ref)} {($ Id.VSub_DollarName hash)} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> ) ] ops: [<Id.Op_DPipe _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] ops: [<Id.Op_Pipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_EXPECTED_REV'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_ANCESTORS_OK'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_NAMES'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/head-name'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<update-ref>} {<-d>} {<--no-deref>} {<BISECT_HEAD>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}] redirects: [] do_fork: T ) ] ops: [ <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _> ] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_replay> name: bisect_replay body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'file='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {(DQ ($ Id.VSub_Pound '#'))} {<-eq>} {<1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'No logfile given'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-r>} {(DQ ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'cannot read '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'file for replaying'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <bisect_reset> more_env: [] words: [{<bisect_reset>}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<git>} {<bisect>} {<command>} {<rev>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName git) <' '> ($ Id.VSub_DollarName bisect))} {<Id.Lit_Equals '='>} {(DQ <'git bisect'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName git))} {<Id.Lit_Equals '='>} {(DQ <git-bisect>)} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Continue continue> ) ] ops: [<Id.Op_DPipe _> <Id.Op_DPipe _>] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName git))} {<Id.Lit_Equals '='>} {(DQ <git-bisect>)} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'rev='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rev='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev='> name:rev) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName command))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'command='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'command='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'command='> name: command ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName bisect))} ) ] redirects: [] ) ] spids: [3131 3146] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <get_terms> more_env: [] words: [{<get_terms>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check_and_set_terms> more_env: [] words: [{<check_and_set_terms>} {(DQ ($ Id.VSub_DollarName command))}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName command))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <start> pattern: (pat.Words words:[{<start>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cmd='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cmd='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmd='> name:cmd) op: assign_op.Equal rhs: {(DQ <'bisect_start '> ($ Id.VSub_DollarName rev))} ) ] redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_DollarName cmd))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words: [ {(DQ ($ Id.VSub_DollarName TERM_GOOD))} {(DQ ($ Id.VSub_DollarName TERM_BAD))} {<skip>} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_write> more_env: [] words: [ {<bisect_write>} {(DQ ($ Id.VSub_DollarName command))} {(DQ ($ Id.VSub_DollarName rev))} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <terms> pattern: (pat.Words words:[{<terms>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_terms> more_env: [] words: [{<bisect_terms>} {($ Id.VSub_DollarName rev)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'?? what are you talking about?'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName file))} ) ] ) (command.Simple blame_tok: <bisect_auto_next> more_env: [] words: [{<bisect_auto_next>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_run> name: bisect_run body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <bisect_next_check> more_env: [] words: [{<bisect_next_check>} {<fail>}] redirects: [] do_fork: T ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'command='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'command='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'command='> name:command) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_At '@'))} ) ] redirects: [] ) (command.Simple blame_tok: <eval_gettextln> more_env: [] words: [ {<eval_gettextln>} { (DQ <'running '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <command> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [{(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'res='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'res='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName res)} {<-lt>} {<0>} {<-o>} {($ Id.VSub_DollarName res)} {<-ge>} {<128>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <eval_gettextln> more_env: [] words: [ {<eval_gettextln>} { (DQ <'bisect run failed:\n'> <'exit code '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'res from \''> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'command\' is < 0 or >= 128'> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName res)} ) ] spids: [3325 3346] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName res)} {<-eq>} {<125>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'state='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'state='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state) op: assign_op.Equal rhs: {(SQ <skip>)} ) ] redirects: [] ) ] spids: [3381 3394] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName res)} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'state='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'state='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName TERM_BAD))} ) ] redirects: [] ) ] spids: [3403 3416] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'state='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'state='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName TERM_GOOD))} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Subshell left: <Id.Op_LParen _> child: (command.Simple blame_tok: <bisect_state> more_env: [] words: [{<bisect_state>} {($ Id.VSub_DollarName state)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)} ) ] do_fork: T ) right: <Id.Right_Subshell _> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'res='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'res='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <sane_grep> more_env: [] words: [ {<sane_grep>} { (DQ <'first '> ($ Id.VSub_DollarName TERM_BAD) <' commit could be any of'> ) } {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [{<gettextln>} {(DQ <'bisect run cannot continue any more'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName res)} ) ] spids: [3471 3492] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName res)} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <eval_gettextln> more_env: [] words: [ {<eval_gettextln>} { (DQ <'bisect run failed:\n'> <'\'bisect_state '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'state\' exited with error code '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <res> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName res)} ) ] spids: [3514 3527] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <sane_grep> more_env: [] words: [ {<sane_grep>} { (DQ <'is the first '> ($ Id.VSub_DollarName TERM_BAD) <' commit'>) } {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [{<gettextln>} {(DQ <'bisect run success'>)}] redirects: [] do_fork: T ) (command.Sentence child: (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) terminator: <Id.Op_Semi _> ) ] spids: [3554 3573] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_log> name: bisect_log body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'We are not bisecting.'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <get_terms> name: get_terms body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<TERM_BAD>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<TERM_GOOD>}] redirects: [] do_fork: T ) ] redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)} ) ] right: <Id.Lit_RBrace '}'> ) ] spids: [3648 3660] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <write_terms> name: write_terms body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'TERM_BAD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TERM_BAD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TERM_BAD='> name:TERM_BAD) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'TERM_GOOD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'TERM_GOOD='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TERM_GOOD='> name:TERM_GOOD) op: assign_op.Equal rhs: {($ Id.VSub_Number 2)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName TERM_BAD))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName TERM_GOOD))} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'please use two different terms'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] spids: [3706 3721] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <check_term_format> more_env: [] words: [{<check_term_format>} {(DQ ($ Id.VSub_DollarName TERM_BAD))} {<bad>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <check_term_format> more_env: [] words: [{<check_term_format>} {(DQ ($ Id.VSub_DollarName TERM_GOOD))} {<good>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s\\n%s\\n'>)} {(DQ ($ Id.VSub_DollarName TERM_BAD))} {(DQ ($ Id.VSub_DollarName TERM_GOOD))} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)} ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <check_term_format> name: check_term_format body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'term='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'term='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'term='> name:term) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<check-ref-format>} {<'refs/bisect/'> (DQ ($ Id.VSub_DollarName term))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'\''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'term\' is not a valid term'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName term))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <help> pattern: (pat.Words words: [ {<help>} {<start>} {<terms>} {<skip>} {<next>} {<reset>} {<visualize>} {<replay>} {<log>} {<run>} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'can\'t use the builtin command \''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'term\' as a term'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <bad> pattern: (pat.Words words:[{<bad>} {<new>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<bad>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'can\'t change the meaning of term \''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'term\''> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] spids: [3875 3889] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <good> pattern: (pat.Words words:[{<good>} {<old>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<good>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'can\'t change the meaning of term \''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'term\''> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] spids: [3935 3949] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <check_and_set_terms> name: check_and_set_terms body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cmd='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cmd='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmd='> name:cmd) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName cmd))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <skip> pattern: (pat.Words words:[{<skip>} {<start>} {<terms>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName cmd))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName TERM_BAD))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {(DQ ($ Id.VSub_DollarName cmd))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName TERM_GOOD))} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'Invalid command: you\'re currently in a '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'TERM_BAD/'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'TERM_GOOD bisect.'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] spids: [4015 4057] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName cmd))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <bad> pattern: (pat.Words words:[{<bad>} {<good>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-s>} { (DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>) } ] redirects: [] do_fork: T ) ] ops: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <write_terms> more_env: [] words: [{<write_terms>} {<bad>} {<good>}] redirects: [] do_fork: T ) ] spids: [4095 4109] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <new> pattern: (pat.Words words:[{<new>} {<old>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-s>} { (DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>) } ] redirects: [] do_fork: T ) ] ops: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <write_terms> more_env: [] words: [{<write_terms>} {<new>} {<old>}] redirects: [] do_fork: T ) ] spids: [4131 4145] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_voc> name: bisect_voc body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <bad> pattern: (pat.Words words:[{<bad>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'bad|new'>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <good> pattern: (pat.Words words:[{<good>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'good|old'>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <bisect_terms> name: bisect_terms body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <get_terms> more_env: [] words: [{<get_terms>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)} ] redirects: [] do_fork: T ) ] ops: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <gettext> more_env: [] words: [{<gettext>} {(DQ <'no terms defined'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] spids: [4228 4242] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Pound '#'))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} { (DQ <'Your current terms are '> ($ Id.VSub_DollarName TERM_GOOD) <' for the old state\n'> <'and '> ($ Id.VSub_DollarName TERM_BAD) <' for the new state.'> ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <1> pattern: (pat.Words words:[{<1>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'arg='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'arg='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName arg))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <--term-good> pattern: (pat.Words words:[{<--term-good>} {<--term-old>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName TERM_GOOD))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <--term-bad> pattern: (pat.Words words:[{<--term-bad>} {<--term-new>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName TERM_BAD))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <die> more_env: [] words: [ {<die>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'invalid argument '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'arg for \'git bisect terms\'.\n'> < 'Supported options are: --term-good|--term-old and --term-bad|--term-new.' > ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Pound '#'))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'cmd='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cmd='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmd='> name:cmd) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Simple blame_tok: <get_terms> more_env: [] words: [{<get_terms>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName cmd))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <help> pattern: (pat.Words words:[{<help>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<bisect>} {<-h>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <start> pattern: (pat.Words words:[{<start>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_start> more_env: [] words: [{<bisect_start>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <bad> pattern: (pat.Words words: [ {<bad>} {<good>} {<new>} {<old>} {(DQ ($ Id.VSub_DollarName TERM_BAD))} {(DQ ($ Id.VSub_DollarName TERM_GOOD))} ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_state> more_env: [] words: [ {<bisect_state>} {(DQ ($ Id.VSub_DollarName cmd))} {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <skip> pattern: (pat.Words words:[{<skip>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_skip> more_env: [] words: [{<bisect_skip>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <next> pattern: (pat.Words words:[{<next>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_next> more_env: [] words: [{<bisect_next>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <visualize> pattern: (pat.Words words:[{<visualize>} {<view>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_visualize> more_env: [] words: [{<bisect_visualize>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <reset> pattern: (pat.Words words:[{<reset>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_reset> more_env: [] words: [{<bisect_reset>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <replay> pattern: (pat.Words words:[{<replay>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_replay> more_env: [] words: [{<bisect_replay>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <log> pattern: (pat.Words words:[{<log>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_log> more_env: [] words: [{<bisect_log>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <run> pattern: (pat.Words words:[{<run>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_run> more_env: [] words: [{<bisect_run>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <terms> pattern: (pat.Words words:[{<terms>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <bisect_terms> more_env: [] words: [{<bisect_terms>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] )