(command.CommandList children: [ (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {<git-sh-i18n>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <unset> more_env: [] words: [{<unset>} {<CDPATH>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IFS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS) op: assign_op.Equal rhs: {(SQ <' \t\n'>)} ) ] redirects: [] ) (command.ShFunction name_tok: <git_broken_path_fix> name: git_broken_path_fix body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ <':'> ($ Id.VSub_DollarName PATH) <':'>)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words: [ {<Id.Lit_Star '*'> <Id.Lit_Colon ':'> ($ Id.VSub_Number 1) <Id.Lit_Colon ':'> <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>} {<ok>}] 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 'PATH='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PATH='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PATH='> name:PATH) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'SANE_TOOL_PATH='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SANE_TOOL_PATH='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SANE_TOOL_PATH='> name: SANE_TOOL_PATH ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IFS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'IFS='> name: IFS ) op: assign_op.Equal rhs: {<Id.Lit_Colon ':'>} ) (AssignPair left: <Id.Lit_VarLike 'path='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'path='> name: path ) op: assign_op.Equal rhs: (rhs_word__Empty) ) (AssignPair left: <Id.Lit_VarLike 'sep='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'sep='> name: sep ) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<x>} {($ Id.VSub_DollarName PATH)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [elem] 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 SANE_TOOL_PATH) <':'> ($ Id.VSub_DollarName elem) ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Op_LParen _> pattern: (pat.Words words: [ {<Id.Lit_QMark '?'> <Id.Lit_Star '*'> <Id.Lit_Colon ':'> <'/bin'> } {<Id.Lit_QMark '?'> <Id.Lit_Star '*'> <Id.Lit_Colon ':'> <'/usr/bin'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'path='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'path='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'path='> name: path ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName path) ($ Id.VSub_DollarName sep) ($ Id.VSub_DollarName SANE_TOOL_PATH) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'sep='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sep='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'sep='> name: sep ) op: assign_op.Equal rhs: {<Id.Lit_Colon ':'>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'SANE_TOOL_PATH='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SANE_TOOL_PATH='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'SANE_TOOL_PATH='> name: SANE_TOOL_PATH ) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) ] ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'path='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'path='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'path='> name: path ) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName path) ($ Id.VSub_DollarName sep) ($ Id.VSub_DollarName elem) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'sep='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sep='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'sep='> name: sep ) op: assign_op.Equal rhs: {<Id.Lit_Colon ':'>} ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName path))}] redirects: [] do_fork: T ) ] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <die> name: die body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <die_with_status> more_env: [] words: [{<die_with_status>} {<1>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <die_with_status> name: die_with_status body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'status='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'status='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'status='> name:status) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_Star '*'))}] 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: {(DQ ($ Id.VSub_DollarName status))} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'GIT_QUIET='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'GIT_QUIET='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_QUIET='> name:GIT_QUIET) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShFunction name_tok: <say> name: say 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>} {<-z>} {(DQ ($ Id.VSub_DollarName GIT_QUIET))}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <printf> more_env: [] words: [{<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_Star '*'))}] redirects: [] do_fork: T ) ] spids: [275 286] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName OPTIONS_SPEC))}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShFunction name_tok: <usage> name: usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <Id.Left_DoubleQuote '"'> more_env: [] words: [{(DQ ($ Id.VSub_Number 0))} {<-h>}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'parseopt_extra='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'parseopt_extra='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'parseopt_extra='> name:parseopt_extra) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName OPTIONS_KEEPDASHDASH))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'parseopt_extra='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'parseopt_extra='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'parseopt_extra='> name: parseopt_extra ) op: assign_op.Equal rhs: {(DQ <--keep-dashdash>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName OPTIONS_STUCKLONG))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'parseopt_extra='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'parseopt_extra='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'parseopt_extra='> name: parseopt_extra ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName parseopt_extra) <' --stuck-long'>)} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr children: [ (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName OPTIONS_SPEC))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-parse>} {<--parseopt>} {($ Id.VSub_DollarName parseopt_extra)} {<-->} {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<Id.ControlFlow_Exit exit>} {($ Id.VSub_QMark '?')}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] spids: [305 316] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'dashless='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dashless='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dashless='> name:dashless) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <basename> more_env: [] words: [{<basename>} {<-->} {(DQ ($ Id.VSub_Number 0))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<-e>} {(SQ <'s/-/ /'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShFunction name_tok: <usage> name: usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (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 <'usage: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'dashless '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <USAGE> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (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 '['>} {<-z>} {(DQ ($ Id.VSub_DollarName LONG_USAGE))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (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: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'usage: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'dashless '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <USAGE> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) ] spids: [480 493] ) ] else_kw: <Id.KW_Else else> else_action: [ (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: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <eval_gettext> more_env: [] words: [ {<eval_gettext>} { (DQ <'usage: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'dashless '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'USAGE\n'> <'\n'> ($ Id.VSub_DollarName LONG_USAGE) ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (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: <-h> pattern: (pat.Words words:[{<-h>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_DollarName LONG_USAGE))}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>) ] ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShFunction name_tok: <set_reflog_action> name: set_reflog_action 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: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name GIT_REFLOG_ACTION> var_name: GIT_REFLOG_ACTION suffix_op: (suffix_op.Unary op: <Id.VTest_ColonPlus _> arg_word: {<set>} ) right: <Id.Right_DollarBrace '}'> ) ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'GIT_REFLOG_ACTION='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'GIT_REFLOG_ACTION='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'GIT_REFLOG_ACTION='> name: GIT_REFLOG_ACTION ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '*'))} ) ] redirects: [] ) (command.Simple blame_tok: <export> more_env: [] words: [{<export>} {<GIT_REFLOG_ACTION>}] redirects: [] do_fork: T ) ] spids: [674 691] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <git_editor> name: git_editor 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>} {<-z>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name GIT_EDITOR> var_name: GIT_EDITOR suffix_op: (suffix_op.Unary op: <Id.VTest_ColonPlus _> arg_word: {<set>} ) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'GIT_EDITOR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'GIT_EDITOR='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'GIT_EDITOR='> name: GIT_EDITOR ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<Id.KW_Var var>} {<GIT_EDITOR>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_QMark '?')} ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [717 732] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_DollarName GIT_EDITOR))} {(SQ <'"$@"'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <git_pager> name: git_pager 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>} {<-t>} {<1>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'GIT_PAGER='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'GIT_PAGER='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_PAGER='> name:GIT_PAGER) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<Id.KW_Var var>} {<GIT_PAGER>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) ] spids: [777 786] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'GIT_PAGER='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'GIT_PAGER='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_PAGER='> name:GIT_PAGER) op: assign_op.Equal rhs: {<cat>} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [vardef] iterable: (for_iter.Words words: [ {<Id.Lit_At '@'> <Id.Lit_Splice '@PAGER_ENV'> <Id.Lit_At '@'> <Id.Lit_At '@'>} ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'var='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'var='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'var='> name:var) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name vardef> var_name: vardef suffix_op: (suffix_op.Unary op: <Id.VOp1_DPercent '%%'> arg_word: {<'='> <Id.Lit_Other '*'>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [ {<eval>} { (DQ <': '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{'> ($ Id.VSub_DollarName vardef) <'}'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' && export '> ($ Id.VSub_DollarName var) ) } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <eval> more_env: [] words: [{<eval>} {(DQ ($ Id.VSub_DollarName GIT_PAGER))} {(SQ <'"$@"'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <sane_grep> name: sane_grep body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <grep> more_env: [ (EnvPair left:<Id.Lit_VarLike 'GREP_OPTIONS='> name:GREP_OPTIONS val:(rhs_word__Empty)) (EnvPair left:<Id.Lit_VarLike 'LC_ALL='> name:LC_ALL val:{<C>}) ] words: [ {<grep>} {<Id.Lit_At '@'> <Id.Lit_Splice '@SANE_TEXT_GREP'> <Id.Lit_At '@'> <Id.Lit_At '@'>} {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <sane_egrep> name: sane_egrep body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <egrep> more_env: [ (EnvPair left:<Id.Lit_VarLike 'GREP_OPTIONS='> name:GREP_OPTIONS val:(rhs_word__Empty)) (EnvPair left:<Id.Lit_VarLike 'LC_ALL='> name:LC_ALL val:{<C>}) ] words: [ {<egrep>} {<Id.Lit_At '@'> <Id.Lit_Splice '@SANE_TEXT_GREP'> <Id.Lit_At '@'> <Id.Lit_At '@'>} {(DQ ($ Id.VSub_At '@'))} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <is_bare_repository> name: is_bare_repository body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--is-bare-repository>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <cd_to_toplevel> name: cd_to_toplevel body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'cdup='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cdup='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cdup='> name:cdup) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--show-toplevel>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {(DQ ($ Id.VSub_DollarName cdup))}] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} { (DQ <'Cannot chdir to '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'cdup, the toplevel of the working tree'> ) } ] 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: {<1>} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <require_work_tree_exists> name: require_work_tree_exists 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>} { (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 'program_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'program_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'program_name='> name: program_name ) op: assign_op.Equal rhs: {($ Id.VSub_Number 0)} ) ] 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 <'fatal: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'program_name cannot be used without a working tree.'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] spids: [997 1018] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <require_work_tree> name: require_work_tree body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--is-inside-work-tree>}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) right: <Id.Eof_RParen _> ) ) } {<Id.Lit_Equals '='>} {<true>} ] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'program_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'program_name='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'program_name='> name: program_name ) op: assign_op.Equal rhs: {($ Id.VSub_Number 0)} ) ] 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 <'fatal: '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'program_name cannot be used without a working tree.'> ) } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <require_clean_work_tree> name: require_clean_work_tree body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--verify>} {<HEAD>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<update-index>} {<-q>} {<--ignore-submodules>} {<--refresh>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'err='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'err='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'err='> name:err) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (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: <git> more_env: [] words: [{<git>} {<diff-files>} {<--quiet>} {<--ignore-submodules>}] redirects: [] do_fork: T ) ] ops: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'action='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'action='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action) 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 action))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <rebase> pattern: (pat.Words words:[{<rebase>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [{<gettextln>} {(DQ <'Cannot rebase: You have unstaged changes.'>)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ <'rewrite branches'>)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} {(DQ <'Cannot rewrite branches: You have unstaged changes.'>)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ <'pull with rebase'>)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} {(DQ <'Cannot pull with rebase: You have unstaged changes.'>)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] 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: <eval_gettextln> more_env: [] words: [ {<eval_gettextln>} { (DQ <'Cannot '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'action: You have unstaged changes.'> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'err='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'err='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'err='> name:err) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] spids: [1143 1156] ) ] 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.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<diff-index>} {<--cached>} {<--quiet>} {<--ignore-submodules>} {<HEAD>} {<-->} ] redirects: [] do_fork: T ) ] ops: [] ) ] ) 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.Simple blame_tok: <test> more_env: [] words: [ {<test>} {($ Id.VSub_DollarName err)} {<Id.Lit_Equals '='>} {<0>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'action='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'action='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'action='> name:action) 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 action))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <rebase> pattern: (pat.Words words:[{<rebase>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} { (DQ < 'Cannot rebase: Your index contains uncommitted changes.' > ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Left_DoubleQuote '"'> pattern: (pat.Words words:[{(DQ <'pull with rebase'>)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} { (DQ < 'Cannot pull with rebase: Your index contains uncommitted changes.' > ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] 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: <eval_gettextln> more_env: [] words: [ {<eval_gettextln>} { (DQ <'Cannot '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\$'> ch: '$' ) <'action: Your index contains uncommitted changes.'> ) } ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [1279 1290] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} {(DQ <'Additionally, your index contains uncommitted changes.'>)} ] 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.ShAssignment left: <Id.Lit_VarLike 'err='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'err='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'err='> name:err) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] spids: [1257 1276] ) ] 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: <test> more_env: [] words: [{<test>} {($ Id.VSub_DollarName err)} {<Id.Lit_Equals '='>} {<1>}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-n>} {(DQ ($ Id.VSub_Number 2))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_Number 2))}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1388 1399] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <pick_ident_script> name: pick_ident_script body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>}] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'lid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'lid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'lid='> name:lid) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'uid='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'uid='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'uid='> name:uid) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <printf> more_env: [] words: [ {<printf>} {(SQ <'%s'>)} { (DQ <'\n'> <'\t\t/^'> ($ Id.VSub_DollarName lid) <' /{\n'> <'\t\t\ts/\'/\''> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\') <'\'\'/g\n'> <'\t\t\th\n'> <'\t\t\ts/^'> ($ Id.VSub_DollarName lid) <' '> ) (SQ <'\\([^<]*\\) <[^>]*> .*$/\\1/'>) (DQ <'\n'> <'\t\t\ts/.*/GIT_'> (${ Id.VSub_Name uid) <'_NAME=\'&\'/p\n'> <'\n'> <'\t\t\tg\n'> <'\t\t\ts/^'> ($ Id.VSub_DollarName lid) <' '> ) (SQ <'[^<]* <\\([^>]*\\)> .*$/\\1/'>) (DQ <'\n'> <'\t\t\ts/.*/GIT_'> (${ Id.VSub_Name uid) <'_EMAIL=\'&\'/p\n'> <'\n'> <'\t\t\tg\n'> <'\t\t\ts/^'> ($ Id.VSub_DollarName lid) <' '> ) (SQ <'[^<]* <[^>]*> \\(.*\\)$/@\\1/'>) (DQ <'\n'> <'\t\t\ts/.*/GIT_'> (${ Id.VSub_Name uid) <'_DATE=\'&\'/p\n'> <'\t\t}\n'> <'\t\t'> ) } ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(SQ <'/^$/q'>)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <parse_ident_from_commit> name: parse_ident_from_commit body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <sed> more_env: [ (EnvPair left:<Id.Lit_VarLike 'LANG='> name:LANG val:{<C>}) (EnvPair left:<Id.Lit_VarLike 'LC_ALL='> name:LC_ALL val:{<C>}) ] words: [ {<sed>} {<-ne>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <pick_ident_script> more_env: [] words: [{<pick_ident_script>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <get_author_ident_from_commit> name: get_author_ident_from_commit body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'encoding='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'encoding='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'encoding='> name:encoding) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr children: [ (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<config>} {<i18n.commitencoding>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<UTF-8>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Pipeline children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<show>} {<-s>} {<--pretty> <Id.Lit_Equals '='> <raw>} {<--encoding> <Id.Lit_Equals '='> (DQ ($ Id.VSub_DollarName encoding))} {(DQ ($ Id.VSub_Number 1))} {<-->} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <parse_ident_from_commit> more_env: [] words: [{<parse_ident_from_commit>} {<author>} {<AUTHOR>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <clear_local_git_env> name: clear_local_git_env body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <unset> more_env: [] words: [ {<unset>} { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--local-env-vars>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <create_virtual_base> name: create_virtual_base body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'sz0='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sz0='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sz0='> name:sz0) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-c>}] redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_Number 1))} ) ] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Pipeline children: [ (command.Simple blame_tok: <Id.Lit_At '@'> more_env: [] words: [ {<Id.Lit_At '@'> <Id.Lit_Splice '@DIFF'> <Id.Lit_At '@'> <Id.Lit_At '@'>} {<-u>} {<'-La/'> (DQ ($ Id.VSub_Number 1))} {<'-Lb/'> (DQ ($ Id.VSub_Number 1))} {(DQ ($ Id.VSub_Number 1))} {(DQ ($ Id.VSub_Number 2))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<apply>} {<--no-add>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) (command.ShAssignment left: <Id.Lit_VarLike 'sz1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'sz1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sz1='> name:sz1) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-c>}] redirects: [ (Redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {(DQ ($ Id.VSub_Number 1))} ) ] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <expr> more_env: [] words: [ {<expr>} {($ Id.VSub_DollarName sz0)} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\<'> ch:'<')} {($ Id.VSub_DollarName sz1)} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\*'> ch:'*')} {<2>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [{<Id.Lit_Colon ':'>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_Number 1))} ) ] do_fork: T ) ] ops: [<Id.Op_DPipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <uname> more_env: [] words: [{<uname>} {<-s>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'> <MINGW> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShFunction name_tok: <sort> name: sort body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <'/usr/bin/sort'> more_env: [] words: [{<'/usr/bin/sort'>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <find> name: find body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <'/usr/bin/find'> more_env: [] words: [{<'/usr/bin/find'>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <pwd> name: pwd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <builtin> more_env: [] words: [{<builtin>} {<pwd>} {<-W>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <is_absolute_path> name: is_absolute_path 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: <Id.Lit_LBracket '['> pattern: (pat.Words words: [ {<Id.Lit_LBracket '['> <'/'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <Id.Lit_RBracket ']'> <Id.Lit_Star '*'> } {<Id.Lit_LBracket '['> <A-Za-z> <Id.Lit_RBracket ']'> <Id.Lit_Colon ':'> <Id.Lit_Star '*'> } ] ) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ShFunction name_tok: <is_absolute_path> name: is_absolute_path 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: <'/'> pattern: (pat.Words words:[{<'/'> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) ] ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShFunction name_tok: <git_dir_init> name: git_dir_init body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'GIT_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'GIT_DIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_DIR='> name:GIT_DIR) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--git-dir>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>) ] ops: [<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: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName SUBDIRECTORY_OK))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [ {<test>} {<-z>} { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--show-cdup>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'exit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'exit='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'exit='> name:exit) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} { (DQ < 'You need to run this command from the toplevel of the working tree.' > ) } ] 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 exit)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [2022 2035] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <test> more_env: [] words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName GIT_DIR))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'GIT_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'GIT_DIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_DIR='> name:GIT_DIR) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.AndOr children: [ (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {(DQ ($ Id.VSub_DollarName GIT_DIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <pwd> more_env: [] words: [{<pwd>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <gettextln> more_env: [] words: [ {<gettextln>} {(DQ <'Unable to determine absolute path of git directory'>)} ] 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: {<1>} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) (command.Simple blame_tok: <Id.Lit_Colon ':'> more_env: [] words: [ {<Id.Lit_Colon ':'>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name GIT_OBJECT_DIRECTORY> var_name: GIT_OBJECT_DIRECTORY suffix_op: (suffix_op.Unary op: <Id.VTest_Equals _> arg_word: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--git-path>} {<objects>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) right: <Id.Right_DollarBrace '}'> ) ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (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>} {<-z>} {(DQ ($ Id.VSub_DollarName NONGIT_OK))}] redirects: [] do_fork: T ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <git_dir_init> more_env: [] words: [{<git_dir_init>}] redirects: [] do_fork: T ) ] spids: [2151 2161] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShFunction name_tok: <peel_committish> name: peel_committish 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: <Id.Lit_Colon ':'> pattern: (pat.Words words:[{<Id.Lit_Colon ':'> <'/'> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.AndOr children: [ (command.ShAssignment left: <Id.Lit_VarLike 'peeltmp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'peeltmp='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'peeltmp='> name:peeltmp) 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_Number 1))} ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<rev-parse>} {<--verify>} {(DQ (${ Id.VSub_Name peeltmp) <'^0'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] 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: <git> more_env: [] words: [{<git>} {<rev-parse>} {<--verify>} {(DQ (${ Id.VSub_Number 1) <'^0'>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) ] )