(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:USAGE spids:[16])
          op: Equal
          rhs: {(SQ <'<start> <url> [<end>]'>)}
          spids: [16]
        )
      ]
      spids: [16]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:LONG_USAGE spids:[21])
          op: Equal
          rhs: 
            {
              (SQ <'Summarizes the changes between two commits to the standard output,\n'> 
                <'and includes the given URL in the generated summary.'>
              )
            }
          spids: [21]
        )
      ]
      spids: [21]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:SUBDIRECTORY_OK spids:[27])
          op: Equal
          rhs: {(SQ <Yes>)}
          spids: [27]
        )
      ]
      spids: [27]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:OPTIONS_KEEPDASHDASH spids:[32])
          op: Equal
          rhs: (word.EmptyWord)
          spids: [32]
        )
      ]
      spids: [32]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:OPTIONS_STUCKLONG spids:[34])
          op: Equal
          rhs: (word.EmptyWord)
          spids: [34]
        )
      ]
      spids: [34]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:OPTIONS_SPEC spids:[36])
          op: Equal
          rhs: 
            {
              (SQ <'git request-pull [options] start url [end]\n'> <'--\n'> 
                <'p    show patch text as well\n'>
              )
            }
          spids: [36]
        )
      ]
      spids: [36]
    )
    (C {(.)} {(git-sh-setup)})
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:GIT_PAGER spids:[49])
          op: Equal
          rhs: (word.EmptyWord)
          spids: [49]
        )
      ]
      spids: [49]
    )
    (C {(export)} {(GIT_PAGER)})
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:patch spids:[56])
          op: Equal
          rhs: (word.EmptyWord)
          spids: [56]
        )
      ]
      spids: [56]
    )
    (command.WhileUntil
      keyword: <KW_While while>
      cond: [
        (command.Case
          to_match: {(DQ ($ VSub_Pound '$#'))}
          arms: [
            (case_arm
              pat_list: [{(0)}]
              action: [(command.ControlFlow token:<ControlFlow_Break break>)]
              spids: [68 69 73 16777215]
            )
          ]
          spids: [60 66 75]
        )
      ]
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{(-p)}]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:patch spids:[93])
                          op: Equal
                          rhs: {(-p)}
                          spids: [93]
                        )
                      ]
                      spids: [93]
                    )
                  ]
                  spids: [89 90 96 16777215]
                )
                (case_arm
                  pat_list: [{(--)}]
                  action: [
                    (command.Sentence
                      child: (C {(shift)})
                      terminator: <Op_Semi ';'>
                    )
                    (command.ControlFlow token:<ControlFlow_Break break>)
                  ]
                  spids: [99 100 108 16777215]
                )
                (case_arm
                  pat_list: [{(-) (Lit_Other '*')}]
                  action: [(C {(usage)})]
                  spids: [111 113 118 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [(command.ControlFlow token:<ControlFlow_Break break>)]
                  spids: [121 122 127 16777215]
                )
              ]
              spids: [80 86 130]
            )
            (C {(shift)})
          ]
          spids: [77 135]
        )
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:base spids:[138])
          op: Equal
          rhs: {($ VSub_Number '$1')}
          spids: [138]
        )
        (assign_pair
          lhs: (lhs_expr.LhsName name:url spids:[141])
          op: Equal
          rhs: {($ VSub_Number '$2')}
          spids: [141]
        )
        (assign_pair
          lhs: (lhs_expr.LhsName name:status spids:[144])
          op: Equal
          rhs: {(0)}
          spids: [144]
        )
      ]
      spids: [138]
    )
    (command.AndOr
      ops: [Op_DAmp Op_DPipe]
      children: [
        (C {(test)} {(-n)} {(DQ ($ VSub_DollarName '$base'))})
        (C {(test)} {(-n)} {(DQ ($ VSub_DollarName '$url'))})
        (C {(usage)})
      ]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:baserev spids:[171])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(git)} {(rev-parse)} {(--verify)} {(--quiet)} 
                        {(DQ ($ VSub_DollarName '$base')) (Lit_Other '^') (0)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [172 186]
              )
            }
          spids: [171]
        )
      ]
      spids: [171]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test)} {(-z)} {(DQ ($ VSub_DollarName '$baserev'))})]
          action: [(C {(die)} {(DQ ('fatal: Not a valid revision: ') ($ VSub_DollarName '$base'))})]
          spids: [16777215 198]
        )
      ]
      spids: [16777215 208]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:local spids:[226])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Number 3>
                suffix_op: (suffix_op.StringUnary op_id:VOp1_Percent arg_word:{(':*')})
                spids: [227 231]
              )
            }
          spids: [226]
        )
      ]
      spids: [226]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:local spids:[233])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Name local>
                suffix_op: (suffix_op.StringUnary op_id:VTest_ColonHyphen arg_word:{(HEAD)})
                spids: [234 238]
              )
            }
          spids: [233]
        )
      ]
      spids: [233]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:remote spids:[240])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Number 3>
                suffix_op: (suffix_op.StringUnary op_id:VOp1_Pound arg_word:{('*:')})
                spids: [241 245]
              )
            }
          spids: [240]
        )
      ]
      spids: [240]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:pretty_remote spids:[247])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Name remote>
                suffix_op: (suffix_op.StringUnary op_id:VOp1_Pound arg_word:{(refs) (Lit_Slash /)})
                spids: [248 253]
              )
            }
          spids: [247]
        )
      ]
      spids: [247]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:pretty_remote spids:[255])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Name pretty_remote>
                suffix_op: (suffix_op.StringUnary op_id:VOp1_Pound arg_word:{(heads) (Lit_Slash /)})
                spids: [256 261]
              )
            }
          spids: [255]
        )
      ]
      spids: [255]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:head spids:[263])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(symbolic-ref)} {(-q)} {(DQ ($ VSub_DollarName '$local'))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [264 274]
              )
            }
          spids: [263]
        )
      ]
      spids: [263]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:head spids:[276])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Name head>
                suffix_op: 
                  (suffix_op.StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: 
                      {
                        (word_part.CommandSubPart
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {(git)} {(show-ref)} {(--heads)} {(--tags)} 
                                      {(DQ ($ VSub_DollarName '$local'))}
                                    )
                                    (C {(cut)} {(-d) (SQ <' '>)} {(-f2)})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [280 303]
                        )
                      }
                  )
                spids: [277 304]
              )
            }
          spids: [276]
        )
      ]
      spids: [276]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:head spids:[306])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Name head>
                suffix_op: 
                  (suffix_op.StringUnary
                    op_id: VTest_ColonHyphen
                    arg_word: 
                      {
                        (word_part.CommandSubPart
                          command_list: 
                            (command.CommandList
                              children: [
                                (C {(git)} {(rev-parse)} {(--quiet)} {(--verify)} 
                                  {(DQ ($ VSub_DollarName '$local'))}
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [310 322]
                        )
                      }
                  )
                spids: [307 323]
              )
            }
          spids: [306]
        )
      ]
      spids: [306]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (C {(test)} {(-z)} {(DQ ($ VSub_DollarName '$head'))})
        (C {(die)} {(DQ ('fatal: Not a valid revision: ') ($ VSub_DollarName '$local'))})
      ]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:headrev spids:[353])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(git)} {(rev-parse)} {(--verify)} {(--quiet)} 
                        {(DQ ($ VSub_DollarName '$head')) (Lit_Other '^') (0)}
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [354 368]
              )
            }
          spids: [353]
        )
      ]
      spids: [353]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (C {(test)} {(-z)} {(DQ ($ VSub_DollarName '$headrev'))})
        (C {(die)} {(DQ ('fatal: Ambiguous revision: ') ($ VSub_DollarName '$local'))})
      ]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:branch_name spids:[391])
          op: Equal
          rhs: 
            {
              (word_part.BracedVarSub
                token: <VSub_Name head>
                suffix_op: 
                  (suffix_op.StringUnary
                    op_id: VOp1_Pound
                    arg_word: {(refs) (Lit_Slash /) (heads) (Lit_Slash /)}
                  )
                spids: [392 399]
              )
            }
          spids: [391]
        )
      ]
      spids: [391]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.AndOr
              ops: [Op_DPipe]
              children: [
                (C {(test)} {(DQ (z) ($ VSub_DollarName '$branch_name'))} {(Lit_Other '=')} 
                  {(DQ (z) ($ VSub_DollarName '$headref'))}
                )
                (command.Pipeline
                  children: [
                    (command.SimpleCommand
                      words: [
                        {(git)}
                        {(config)}
                        {(DQ (branch.) ($ VSub_DollarName '$branch_name') (.description))}
                      ]
                      redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})]
                    )
                  ]
                  negated: T
                )
              ]
            )
          ]
          action: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:branch_name spids:[438])
                  op: Equal
                  rhs: (word.EmptyWord)
                  spids: [438]
                )
              ]
              spids: [438]
            )
          ]
          spids: [16777215 435]
        )
      ]
      spids: [16777215 440]
    )
    (command.AndOr
      ops: [Op_DPipe]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:merge_base spids:[443])
              op: Equal
              rhs: 
                {
                  (word_part.CommandSubPart
                    command_list: 
                      (command.CommandList
                        children: [
                          (C {(git)} {(merge-base)} {($ VSub_DollarName '$baserev')} 
                            {($ VSub_DollarName '$headrev')}
                          )
                        ]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [444 452]
                  )
                }
              spids: [443]
            )
          ]
          spids: [443]
        )
        (C {(die)} 
          {
            (DQ ('fatal: No commits in common between ') ($ VSub_DollarName '$base') (' and ') 
              ($ VSub_DollarName '$head')
            )
          }
        )
      ]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:find_matching_ref spids:[481])
          op: Equal
          rhs: 
            {
              (SQ <'\n'> <'\tmy ($head,$headrev) = (@ARGV);\n'> <'\tmy ($found);\n'> <'\n'> 
                <'\twhile (<STDIN>) {\n'> <'\t\tchomp;\n'> <'\t\tmy ($sha1, $ref, $deref) = /^(\\S+)\\s+([^^]+)(\\S*)$/;\n'> 
                <'\t\tmy ($pattern);\n'> <'\t\tnext unless ($sha1 eq $headrev);\n'> <'\n'> <'\t\t$pattern="/$head\\$";\n'> 
                <'\t\tif ($ref eq $head) {\n'> <'\t\t\t$found = $ref;\n'> <'\t\t}\n'> <'\t\tif ($ref =~ /$pattern/) {\n'> <'\t\t\t$found = $ref;\n'> 
                <'\t\t}\n'> <'\t\tif ($sha1 eq $head) {\n'> <'\t\t\t$found = $sha1;\n'> <'\t\t}\n'> <'\t}\n'> <'\tif ($found) {\n'> 
                <'\t\tprint "$found\\n";\n'> <'\t}\n'>
              )
            }
          spids: [481]
        )
      ]
      spids: [481]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:ref spids:[510])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(git)} {(ls-remote)} {(DQ ($ VSub_DollarName '$url'))})
                          (C {(Lit_Other '@') (Lit_Other '@') (PERL) (Lit_Other '@') (Lit_Other '@')} 
                            {(-e)} {(DQ ($ VSub_DollarName '$find_matching_ref'))} 
                            {
                              (DQ 
                                (word_part.BracedVarSub
                                  token: <VSub_Name remote>
                                  suffix_op: 
                                    (suffix_op.StringUnary
                                      op_id: VTest_ColonHyphen
                                      arg_word: {(HEAD)}
                                    )
                                  spids: [535 539]
                                )
                              )
                            } {(DQ ($ VSub_DollarName '$headrev'))}
                          )
                        ]
                        negated: F
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [511 545]
              )
            }
          spids: [510]
        )
      ]
      spids: [510]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test)} {(-z)} {(DQ ($ VSub_DollarName '$ref'))})]
          action: [
            (command.SimpleCommand
              words: [
                {(echo)}
                {
                  (DQ ('warn: No match for commit ') ($ VSub_DollarName '$headrev') (' found at ') 
                    ($ VSub_DollarName '$url')
                  )
                }
              ]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.SimpleCommand
              words: [
                {(echo)}
                {
                  (DQ ("warn: Are you sure you pushed '") 
                    (word_part.BracedVarSub
                      token: <VSub_Name remote>
                      suffix_op: (suffix_op.StringUnary op_id:VTest_ColonHyphen arg_word:{(HEAD)})
                      spids: [578 582]
                    ) ("' there?")
                  )
                }
              ]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:status spids:[590])
                  op: Equal
                  rhs: {(1)}
                  spids: [590]
                )
              ]
              spids: [590]
            )
          ]
          spids: [16777215 558]
        )
      ]
      spids: [16777215 593]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(test)} {(DQ ($ VSub_DollarName '$ref'))} {(Lit_Other '=')} 
              {(DQ (refs/tags/) ($ VSub_DollarName '$pretty_remote'))}
            )
          ]
          action: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:pretty_remote spids:[617])
                  op: Equal
                  rhs: {(tags/) ($ VSub_DollarName '$pretty_remote')}
                  spids: [617]
                )
              ]
              spids: [617]
            )
          ]
          spids: [16777215 614]
        )
      ]
      spids: [16777215 621]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:url spids:[624])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(ls-remote)} {(--get-url)} {(DQ ($ VSub_DollarName '$url'))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [625 635]
              )
            }
          spids: [624]
        )
      ]
      spids: [624]
    )
    (command.AndOr
      ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DPipe]
      children: [
        (C {(git)} {(show)} {(-s)} 
          {(--format) (Lit_Other '=') 
            (SQ <'The following changes since commit %H:\n'> <'\n'> <'  %s (%ci)\n'> <'\n'> 
              <'are available in the git repository at:\n'>
            )
          } {($ VSub_DollarName '$merge_base')}
        )
        (C {(echo)} {(DQ ('  ') ($ VSub_DollarName '$url') (' ') ($ VSub_DollarName '$pretty_remote'))})
        (C {(git)} {(show)} {(-s)} 
          {(--format) (Lit_Other '=') 
            (SQ <'\n'> <'for you to fetch changes up to %H:\n'> <'\n'> <'  %s (%ci)\n'> <'\n'> 
              <---------------------------------------------------------------->
            )
          } {($ VSub_DollarName '$headrev')}
        )
        (command.If
          arms: [
            (if_arm
              cond: [
                (C {(test)} 
                  {
                    (word_part.CommandSubPart
                      command_list: 
                        (command.CommandList
                          children: [(C {(git)} {(cat-file)} {(-t)} {(DQ ($ VSub_DollarName '$head'))})]
                        )
                      left_token: <Left_CommandSub '$('>
                      spids: [695 705]
                    )
                  } {(Lit_Other '=')} {(tag)}
                )
              ]
              action: [
                (command.Pipeline
                  children: [
                    (C {(git)} {(cat-file)} {(tag)} {(DQ ($ VSub_DollarName '$head'))})
                    (C {(sed)} {(-n)} {(-e)} {(SQ <'1,/^$/d'>)} {(-e)} {(SQ <'/^-----BEGIN PGP /q'>)} {(-e)} 
                      {(p)}
                    )
                  ]
                  negated: F
                )
                (C {(echo)})
                (C {(echo)} {(DQ (----------------------------------------------------------------))})
              ]
              spids: [16777215 711]
            )
          ]
          spids: [16777215 757]
        )
        (command.If
          arms: [
            (if_arm
              cond: [(C {(test)} {(-n)} {(DQ ($ VSub_DollarName '$branch_name'))})]
              action: [
                (C {(echo)} 
                  {
                    (DQ ('(from the branch description for ') ($ VSub_DollarName '$branch_name') 
                      (' local branch)')
                    )
                  }
                )
                (C {(echo)})
                (C {(git)} {(config)} {(DQ (branch.) ($ VSub_DollarName '$branch_name') (.description))})
                (C {(echo)} {(DQ (----------------------------------------------------------------))})
              ]
              spids: [16777215 772]
            )
          ]
          spids: [16777215 804]
        )
        (C {(git)} {(shortlog)} {(Lit_Other '^') ($ VSub_DollarName '$baserev')} 
          {($ VSub_DollarName '$headrev')}
        )
        (C {(git)} {(diff)} {(-M)} {(--stat)} {(--summary)} {($ VSub_DollarName '$patch')} 
          {($ VSub_DollarName '$merge_base') (..) ($ VSub_DollarName '$headrev')}
        )
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:status spids:[838])
              op: Equal
              rhs: {(1)}
              spids: [838]
            )
          ]
          spids: [838]
        )
      ]
    )
    (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{($ VSub_DollarName '$status')})
  ]
)