Release tag script: add -dry-run flag
[oota-llvm.git] / utils / release / tag.sh
1 #!/bin/sh
2 #===-- tag.sh - Tag the LLVM release candidates ----------------------------===#
3 #
4 #                     The LLVM Compiler Infrastructure
5 #
6 # This file is distributed under the University of Illinois Open Source
7 # License.
8 #
9 #===------------------------------------------------------------------------===#
10 #
11 # Create branches and release candidates for the LLVM release.
12 #
13 #===------------------------------------------------------------------------===#
14
15 set -e
16
17 release=""
18 rc=""
19 rebranch="no"
20 projects="llvm cfe dragonegg test-suite compiler-rt libcxx libcxxabi clang-tools-extra polly lldb lld openmp"
21 dryrun=""
22
23 base_url="https://llvm.org/svn/llvm-project"
24
25 function usage() {
26     echo "usage: `basename $0` -release <num> [-rebranch] [-dry-run]"
27     echo "usage: `basename $0` -release <num> -rc <num> [-dry-run]"
28     echo " "
29     echo "  -release <num>  The version number of the release"
30     echo "  -rc <num>       The release candidate number"
31     echo "  -rebranch       Remove existing branch, if present, before branching"
32     echo "  -final          Tag final release candidate"
33     echo "  -dry-run        Make no changes to the repository, just print the commands"
34 }
35
36 function tag_version() {
37     set -x
38     for proj in  $projects; do
39         if svn ls $base_url/$proj/branches/release_$branch_release > /dev/null 2>&1 ; then
40             if [ $rebranch = "no" ]; then
41                 continue
42             fi
43             ${dryrun} svn remove -m "Removing old release_$branch_release branch for rebranching." \
44                 $base_url/$proj/branches/release_$branch_release
45         fi
46         ${dryrun} svn copy -m "Creating release_$branch_release branch" \
47             $base_url/$proj/trunk \
48             $base_url/$proj/branches/release_$branch_release
49     done
50     set +x
51 }
52
53 function tag_release_candidate() {
54     set -x
55     for proj in $projects ; do
56         if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release > /dev/null 2>&1 ; then
57             ${dryrun} svn mkdir -m "Creating release directory for release_$tag_release." $base_url/$proj/tags/RELEASE_$tag_release
58         fi
59         if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release/$rc > /dev/null 2>&1 ; then
60             ${dryrun} svn copy -m "Creating release candidate $rc from release_$tag_release branch" \
61                 $base_url/$proj/branches/release_$branch_release \
62                 $base_url/$proj/tags/RELEASE_$tag_release/$rc
63         fi
64     done
65     set +x
66 }
67
68 while [ $# -gt 0 ]; do
69     case $1 in
70         -release | --release )
71             shift
72             release=$1
73             ;;
74         -rc | --rc )
75             shift
76             rc="rc$1"
77             ;;
78         -rebranch | --rebranch )
79             rebranch="yes"
80             ;;
81         -final | --final )
82             rc="final"
83             ;;
84         -dry-run | --dry-run )
85             dryrun="echo"
86             ;;
87         -h | --help | -help )
88             usage
89             exit 0
90             ;;
91         * )
92             echo "unknown option: $1"
93             usage
94             exit 1
95             ;;
96     esac
97     shift
98 done
99
100 if [ "x$release" = "x" ]; then
101     echo "error: need to specify a release version"
102     echo
103     usage
104     exit 1
105 fi
106
107 branch_release=`echo $release | sed -e 's,\([0-9]*\.[0-9]*\).*,\1,' | sed -e 's,\.,,g'`
108 tag_release=`echo $release | sed -e 's,\.,,g'`
109
110 if [ "x$rc" = "x" ]; then
111     tag_version
112 else
113     tag_release_candidate
114 fi
115
116 exit 0