(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 '}'>
        )
    )
  ]
)