Add a flag to rebranch if we need to.
[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
21 base_url="https://llvm.org/svn/llvm-project"
22
23 function usage() {
24     echo "usage: `basename $0` -release <num> [-rebranch]"
25     echo "usage: `basename $0` -release <num> -rc <num>"
26     echo " "
27     echo "  -release <num>  The version number of the release"
28     echo "  -rc <num>       The release candidate number"
29     echo "  -rebranch       Remove existing branch, if present, before branching"
30     echo "  -final          Tag final release candidate"
31 }
32
33 function tag_version() {
34     set -x
35     for proj in llvm cfe dragonegg test-suite compiler-rt ; do
36         if svn ls $base_url/$proj/branches/release_$release > /dev/null 2>&1 ; then
37             if [ $rebranch = "no" ]; then
38                 continue
39             fi
40             svn remove -m "Removing old release_$release branch for rebranching." \
41                 $base_url/$proj/branches/release_$release
42         fi
43         svn copy -m "Creating release_$release branch" \
44             $base_url/$proj/trunk \
45             $base_url/$proj/branches/release_$release
46     done
47     set +x
48 }
49
50 function tag_release_candidate() {
51     set -x
52     for proj in llvm cfe dragonegg test-suite compiler-rt ; do
53         if ! svn ls $base_url/$proj/tags/RELEASE_$release > /dev/null 2>&1 ; then
54             svn mkdir -m "Creating release directory for release_$release." $base_url/$proj/tags/RELEASE_$release
55         fi
56         if ! svn ls $base_url/$proj/tags/RELEASE_$release/$rc > /dev/null 2>&1 ; then
57             svn copy -m "Creating release candidate $rc from release_$release branch" \
58                 $base_url/$proj/branches/release_$release \
59                 $base_url/$proj/tags/RELEASE_$release/$rc
60         fi
61     done
62     set +x
63 }
64
65 while [ $# -gt 0 ]; do
66     case $1 in
67         -release | --release )
68             shift
69             release=$1
70             ;;
71         -rc | --rc )
72             shift
73             rc="rc$1"
74             ;;
75         -rebranch | --rebranch )
76             rebranch="yes"
77             ;;
78         -final | --final )
79             rc="final"
80             ;;
81         -h | --help | -help )
82             usage
83             exit 0
84             ;;
85         * )
86             echo "unknown option: $1"
87             usage
88             exit 1
89             ;;
90     esac
91     shift
92 done
93
94 if [ "x$release" = "x" ]; then
95     echo "error: need to specify a release version"
96     echo
97     usage
98     exit 1
99 fi
100
101 release=`echo $release | sed -e 's,\.,,g'`
102
103 if [ "x$rc" = "x" ]; then
104     tag_version
105 else
106     tag_release_candidate
107 fi
108
109 exit 1