Drop remaining Dragonegg support in release scripts
[oota-llvm.git] / utils / release / tag.sh
index 80da47a4db0d517240eff07c8b213df00ff2b4c6..8d6cd5f2f6324689fbd437586a41db8b9bde3382 100755 (executable)
@@ -16,40 +16,53 @@ set -e
 
 release=""
 rc=""
+rebranch="no"
+projects="llvm cfe test-suite compiler-rt libcxx libcxxabi clang-tools-extra polly lldb lld openmp"
+dryrun=""
+revision="HEAD"
 
 base_url="https://llvm.org/svn/llvm-project"
 
 function usage() {
-    echo "usage: `basename $0` -release <num>"
-    echo "usage: `basename $0` -release <num> -rc <num>"
+    echo "usage: `basename $0` -release <num> [-rebranch] [-revision <num>] [-dry-run]"
+    echo "usage: `basename $0` -release <num> -rc <num> [-dry-run]"
     echo " "
-    echo "  -release <num>  The version number of the release"
-    echo "  -rc <num>       The release candidate number"
-    echo "  -final          Tag final release candidate"
+    echo "  -release <num>   The version number of the release"
+    echo "  -rc <num>        The release candidate number"
+    echo "  -rebranch        Remove existing branch, if present, before branching"
+    echo "  -final           Tag final release candidate"
+    echo "  -revision <num>  Revision to branch off (default: HEAD)"
+    echo "  -dry-run         Make no changes to the repository, just print the commands"
 }
 
 function tag_version() {
     set -x
-    for proj in llvm cfe dragonegg test-suite compiler-rt libcxx libcxxabi ; do
-        if ! svn ls $base_url/$proj/branches/release_$release > /dev/null 2>&1 ; then
-            svn copy -m "Creating release_$release branch" \
-                $base_url/$proj/trunk \
-                $base_url/$proj/branches/release_$release
+    for proj in  $projects; do
+        if svn ls $base_url/$proj/branches/release_$branch_release > /dev/null 2>&1 ; then
+            if [ $rebranch = "no" ]; then
+                continue
+            fi
+            ${dryrun} svn remove -m "Removing old release_$branch_release branch for rebranching." \
+                $base_url/$proj/branches/release_$branch_release
         fi
+        ${dryrun} svn copy -m "Creating release_$branch_release branch off revision ${revision}" \
+            -r ${revision} \
+            $base_url/$proj/trunk \
+            $base_url/$proj/branches/release_$branch_release
     done
     set +x
 }
 
 function tag_release_candidate() {
     set -x
-    for proj in llvm cfe dragonegg test-suite compiler-rt libcxx libcxxabi ; do
-        if ! svn ls $base_url/$proj/tags/RELEASE_$release > /dev/null 2>&1 ; then
-            svn mkdir -m "Creating release directory for release_$release." $base_url/$proj/tags/RELEASE_$release
+    for proj in $projects ; do
+        if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release > /dev/null 2>&1 ; then
+            ${dryrun} svn mkdir -m "Creating release directory for release_$tag_release." $base_url/$proj/tags/RELEASE_$tag_release
         fi
-        if ! svn ls $base_url/$proj/tags/RELEASE_$release/$rc > /dev/null 2>&1 ; then
-            svn copy -m "Creating release candidate $rc from release_$release branch" \
-                $base_url/$proj/branches/release_$release \
-                $base_url/$proj/tags/RELEASE_$release/$rc
+        if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release/$rc > /dev/null 2>&1 ; then
+            ${dryrun} svn copy -m "Creating release candidate $rc from release_$tag_release branch" \
+                $base_url/$proj/branches/release_$branch_release \
+                $base_url/$proj/tags/RELEASE_$tag_release/$rc
         fi
     done
     set +x
@@ -65,9 +78,19 @@ while [ $# -gt 0 ]; do
             shift
             rc="rc$1"
             ;;
+        -rebranch | --rebranch )
+            rebranch="yes"
+            ;;
         -final | --final )
             rc="final"
             ;;
+        -revision | --revision )
+            shift
+            revision="$1"
+            ;;
+        -dry-run | --dry-run )
+            dryrun="echo"
+            ;;
         -h | --help | -help )
             usage
             exit 0
@@ -88,12 +111,20 @@ if [ "x$release" = "x" ]; then
     exit 1
 fi
 
-release=`echo $release | sed -e 's,\.,,g'`
+branch_release=`echo $release | sed -e 's,\([0-9]*\.[0-9]*\).*,\1,' | sed -e 's,\.,,g'`
+tag_release=`echo $release | sed -e 's,\.,,g'`
 
 if [ "x$rc" = "x" ]; then
     tag_version
 else
+    if [ "$revision" != "HEAD" ]; then
+        echo "error: cannot use -revision with -rc"
+        echo
+        usage
+        exit 1
+    fi
+
     tag_release_candidate
 fi
 
-exit 1
+exit 0