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
15set -e
16
17release=""
18rc=""
19rebranch="no"
20
21base_url="https://llvm.org/svn/llvm-project"
22
23function 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
33function 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
50function 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
65while [ $# -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
92done
93
94if [ "x$release" = "x" ]; then
95    echo "error: need to specify a release version"
96    echo
97    usage
98    exit 1
99fi
100
101release=`echo $release | sed -e 's,\.,,g'`
102
103if [ "x$rc" = "x" ]; then
104    tag_version
105else
106    tag_release_candidate
107fi
108
109exit 1
110