(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 '$#'))} {<-eq>} {<2>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:version)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [111]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:nextVersion)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$2')}
                  spids: [115]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:nextVersionSNAPSHOT)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name nextVersion) <-SNAPSHOT>}
                  spids: [119]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:tag)
                  op: assign_op.Equal
                  rhs: {<apache-arrow-> (${ Id.VSub_Name version)}
                  spids: [126]
                )
              ]
            )
            (C {<echo>} {(DQ <'Updating changelog for '> ($ Id.VSub_DollarName '$version'))})
            (C {($ Id.VSub_DollarName '$SOURCE_DIR') <'/update-changelog.sh'>} 
              {($ Id.VSub_DollarName '$version')}
            )
            (C {<echo>} 
              {
                (DQ <'prepare release '> (${ Id.VSub_Name version) <' rc '> (${ Id.VSub_Name rcnum) 
                  <' on tag '> (${ Id.VSub_Name tag) <' then reset to version '> (${ Id.VSub_Name nextVersionSNAPSHOT)
                )
              }
            )
            (C {<cd>} {(DQ (${ Id.VSub_Name SOURCE_DIR) <'/../../java'>)})
            (C {<mvn>} {<release> <Id.Lit_Colon ':'> <clean>})
            (C {<mvn>} {<release> <Id.Lit_Colon ':'> <prepare>} 
              {<-Dtag> <Id.Lit_Equals '='> (${ Id.VSub_Name tag)} {<-DreleaseVersion> <Id.Lit_Equals '='> (${ Id.VSub_Name version)} {<-DautoVersionSubmodules>} 
              {<-DdevelopmentVersion> <Id.Lit_Equals '='> (${ Id.VSub_Name nextVersionSNAPSHOT)}
            )
            (C {<cd>} {<->})
            (C {<echo>} 
              {(DQ <'Finish staging binary artifacts by running: sh dev/release/01-perform.sh'>)}
            )
          ]
          spids: [93 108]
        )
      ]
      else_action: [
        (C {<echo>} {(DQ <'Usage: '> ($ Id.VSub_Number '$0') <' <version> <nextVersion>'>)})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
      ]
    )
  ]
)