(command.CommandList
  children: [
    (C {<set>} {<-e>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SOURCE_DIR)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<cd>} 
                          {
                            (DQ 
                              (command_sub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (C {<dirname>} 
                                    {
                                      (DQ 
                                        (braced_var_sub
                                          token: <Id.VSub_Name BASH_SOURCE>
                                          bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>})
                                        )
                                      )
                                    }
                                  )
                              )
                            )
                          }
                        )
                        (C {<pwd>})
                      ]
                    )
                )
              )
            }
          spids: [62]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Pound '$#'))} {<-ne>} {<2>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'Usage: '> ($ Id.VSub_Number '$0') <' <version> <rc-num>'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
          ]
          spids: [93 108]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:version)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [125]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:rc)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$2')}
          spids: [128]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: (C {<Id.Lit_LBracket '['>} {<-d>} {<'tmp/'>} {<Id.Lit_RBracket ']'>})
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'Cannot run: tmp/ exists'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
          ]
          spids: [132 143]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tag)
          op: assign_op.Equal
          rhs: {<apache-arrow-> (${ Id.VSub_Name version)}
          spids: [158]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tagrc)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name tag) <-rc> (${ Id.VSub_Name rc)}
          spids: [164]
        )
      ]
    )
    (C {<echo>} {(DQ <'Preparing source for tag '> (${ Id.VSub_Name tag))})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:release_hash)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Pipeline
                    children: [
                      (command.Simple
                        words: [{<git>} {<rev-list>} {($ Id.VSub_DollarName '$tag')}]
                        redirects: [
                          (redir
                            op: <Id.Redir_Great '2>'>
                            loc: (redir_loc.Fd fd:2)
                            arg: {<'/dev/null'>}
                          )
                        ]
                        do_fork: T
                      )
                      (C {<head>} {<-n>} {<1>})
                    ]
                    negated: F
                  )
              )
            }
          spids: [184]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$release_hash'))} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'Cannot continue: unknown git tag: '> ($ Id.VSub_DollarName '$tag'))})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
          ]
          spids: [209 222]
        )
      ]
    )
    (C {<echo>} {(DQ <'Using commit '> ($ Id.VSub_DollarName '$release_hash'))})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tarball)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name tag) <.tar.gz>}
          spids: [246]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:extract_dir)
          op: assign_op.Equal
          rhs: {<tmp-apache-arrow>}
          spids: [253]
        )
      ]
    )
    (C {<rm>} {<-rf>} {(${ Id.VSub_Name extract_dir)})
    (command.Pipeline
      children: [
        (C {<git>} {<archive>} {(${ Id.VSub_Name release_hash)} {<--prefix>} 
          {(${ Id.VSub_Name extract_dir) <'/'>}
        )
        (C {<tar>} {<xf>} {<->})
      ]
      negated: F
    )
    (C {<mkdir>} {<-p>} {(${ Id.VSub_Name extract_dir) <'/cpp/build'>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:cpp_install_dir)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name extract_dir) <'/cpp/install'>}
          spids: [309]
        )
      ]
    )
    (C {<cd>} {(${ Id.VSub_Name extract_dir) <'/cpp/build'>})
    (C {<cmake>} {<..>} {<-DCMAKE_INSTALL_PREFIX> <Id.Lit_Equals '='> (${ Id.VSub_Name cpp_install_dir)} 
      {<-DARROW_BUILD_TESTS> <Id.Lit_Equals '='> <no>}
    )
    (C {<make>} {<-j8>})
    (C {<make>} {<install>})
    (C {<cd>} {<->})
    (C {<cd>} {(${ Id.VSub_Name extract_dir) <'/c_glib'>})
    (C {<'./autogen.sh'>})
    (C {<'./configure'>} 
      {<Id.Lit_VarLike 'PKG_CONFIG_PATH='> ($ Id.VSub_DollarName '$cpp_install_dir') 
        <'/lib/pkgconfig'>
      } {<--enable-gtk-doc>}
    )
    (command.Simple
      words: [{<make>} {<-j8>}]
      more_env: [
        (env_pair
          name: LD_LIBRARY_PATH
          val: 
            {($ Id.VSub_DollarName '$cpp_install_dir') <'/lib'> <Id.Lit_Colon ':'> 
              ($ Id.VSub_DollarName '$LD_LIBRARY_PATH')
            }
          spids: [381]
        )
      ]
      do_fork: T
    )
    (C {<make>} {<dist>})
    (C {<tar>} {<xzf>} {<Id.Lit_Star '*'> <.tar.gz>})
    (C {<rm>} {<Id.Lit_Star '*'> <.tar.gz>})
    (C {<cd>} {<->})
    (C {<rm>} {<-rf>} {<'tmp-c_glib/'>})
    (C {<mv>} {(${ Id.VSub_Name extract_dir) <'/c_glib/apache-arrow-glib-'> <Id.Lit_Star '*'>} 
      {<'tmp-c_glib/'>}
    )
    (C {<rm>} {<-rf>} {(${ Id.VSub_Name extract_dir)})
    (C {<rm>} {<-rf>} {(${ Id.VSub_Name tag)})
    (command.Pipeline
      children: [
        (C {<git>} {<archive>} {($ Id.VSub_DollarName '$release_hash')} {<--prefix>} 
          {(${ Id.VSub_Name tag) <'/'>}
        )
        (C {<tar>} {<xf>} {<->})
      ]
      negated: F
    )
    (C {<rm>} {<-rf>} {(${ Id.VSub_Name tag) <'/c_glib'>})
    (C {<mv>} {<tmp-c_glib>} {(${ Id.VSub_Name tag) <'/c_glib'>})
    (C {<tar>} {<czf>} {(${ Id.VSub_Name tarball)} {(${ Id.VSub_Name tag)})
    (C {<rm>} {<-rf>} {(${ Id.VSub_Name tag)})
    (C {(${ Id.VSub_Name SOURCE_DIR) <'/run-rat.sh'>} {(${ Id.VSub_Name tarball)})
    (C {<gpg>} {<--armor>} {<--output>} {(${ Id.VSub_Name tarball) <.asc>} {<--detach-sig>} 
      {(${ Id.VSub_Name tarball)}
    )
    (command.Simple
      words: [{<gpg>} {<--print-md>} {<MD5>} {(${ Id.VSub_Name tarball)}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name tarball) <.md5>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<sha1sum>} {($ Id.VSub_DollarName '$tarball')}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name tarball) <.sha1>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<sha256sum>} {($ Id.VSub_DollarName '$tarball')}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name tarball) <.sha256>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<sha512sum>} {($ Id.VSub_DollarName '$tarball')}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name tarball) <.sha512>}
        )
      ]
      do_fork: T
    )
    (C {<svn>} {<co>} {<--depth> <Id.Lit_Equals '='> <empty>} 
      {<https> <Id.Lit_Colon ':'> <'//dist.apache.org/repos/dist/dev/arrow'>} {<tmp>}
    )
    (C {<mkdir>} {<-p>} {<'tmp/'> (${ Id.VSub_Name tagrc)})
    (C {<cp>} {(${ Id.VSub_Name tarball) <Id.Lit_Star '*'>} {<'tmp/'> (${ Id.VSub_Name tagrc)})
    (C {<svn>} {<add>} {<'tmp/'> (${ Id.VSub_Name tagrc)})
    (C {<svn>} {<ci>} {<-m>} {(SQ <'Apache Arrow ${version} RC${rc}'>)} {<'tmp/'> (${ Id.VSub_Name tagrc)})
    (C {<rm>} {<-rf>} {<tmp>})
    (C {<echo>} {(DQ <'Success! The release candidate is available here:'>)})
    (C {<echo>} {(DQ <'  https://dist.apache.org/repos/dist/dev/arrow/'> (${ Id.VSub_Name tagrc))})
    (C {<echo>} {(DQ )})
    (C {<echo>} {(DQ <'Commit SHA1: '> (${ Id.VSub_Name release_hash))})
  ]
)