PARQUET-1687: Update release process (#155)

Update prepare-release.sh to create RC tags and keep using the current
RC version with SNAPSHOT for development.
Update source-release.sh to retrieve the hash of the RC tag.
Create the new script finalize-release to create the final release tag
and update the development version.
diff --git a/dev/finalize-release b/dev/finalize-release
new file mode 100755
index 0000000..eef6720
--- /dev/null
+++ b/dev/finalize-release
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+set -e
+
+if [ -z "$3" ]; then
+    cat <<EOF
+Usage: $0 <release-version> <rc-num> <new-development-version-without-SNAPSHOT-suffix>
+Example: $0 2.7.0 0 2.8.0
+EOF
+  exit 1
+fi
+
+release_version="$1"
+release_tag="apache-parquet-format-$release_version"
+rc_tag="$release_tag-rc$2"
+new_development_version="$3-SNAPSHOT"
+
+git tag -am "Release Apache Parquet Format $release_version" "$release_tag" "$rc_tag"
+mvn --batch-mode release:update-versions -DdevelopmentVersion="$new_development_version"
+git commit -am 'Prepare for next development iteration'
+
+echo
+echo "Verify the release tag and the current development version then push the changes by running: git push --follow-tags"
diff --git a/dev/prepare-release.sh b/dev/prepare-release.sh
old mode 100644
new mode 100755
index 2021260..7529695
--- a/dev/prepare-release.sh
+++ b/dev/prepare-release.sh
@@ -20,18 +20,23 @@
 
 set -e
 
-if [ -z "$2" ]; then
+[[ $# != 2 ]] && err="Incorrect number of arguments: $#"
+[[ -z $err ]] && ! [[ $1 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && err="Invalid release version: \"$1\""
+[[ -z $err ]] && ! [[ $2 =~ ^[0-9]+$ ]] && err="Invalid rc number: \"$2\""
+
+if [[ -n $err ]]; then
     cat <<EOF
-Usage: $0 <release-version> <new-development-version-without-SNAPSHOT-suffix>
-Example: $0 1.6.0 1.7.0
+$err
+Usage: $0 <release-version> <rc-num>
+Example: $0 2.7.0 0
 EOF
   exit 1
 fi
 
 release_version="$1"
-new_development_version="$2-SNAPSHOT"
+new_development_version="$release_version-SNAPSHOT"
 
-tag="apache-parquet-format-$release_version"
+tag="apache-parquet-format-$release_version-rc$2"
 
 mvn release:clean
 mvn release:prepare -Dtag="$tag" "-DreleaseVersion=$release_version" -DdevelopmentVersion="$new_development_version"
diff --git a/dev/source-release.sh b/dev/source-release.sh
old mode 100644
new mode 100755
index 8d4e281..16e77c7
--- a/dev/source-release.sh
+++ b/dev/source-release.sh
@@ -41,10 +41,10 @@
 
 echo "Preparing source for $tagrc"
 
-release_hash=`git rev-list $tag 2> /dev/null | head -n 1 `
+release_hash=`git rev-list "$tagrc" 2> /dev/null | head -n 1 `
 
 if [ -z "$release_hash" ]; then
-  echo "Cannot continue: unknown git tag: $tag"
+  echo "Cannot continue: unknown git tag: $tagrc"
   exit
 fi