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"
20projects="llvm cfe dragonegg test-suite compiler-rt libcxx libcxxabi clang-tools-extra polly lldb lld openmp"
21dryrun=""
22revision="HEAD"
23
24base_url="https://llvm.org/svn/llvm-project"
25
26function usage() {
27    echo "usage: `basename $0` -release <num> [-rebranch] [-revision <num>] [-dry-run]"
28    echo "usage: `basename $0` -release <num> -rc <num> [-dry-run]"
29    echo " "
30    echo "  -release <num>   The version number of the release"
31    echo "  -rc <num>        The release candidate number"
32    echo "  -rebranch        Remove existing branch, if present, before branching"
33    echo "  -final           Tag final release candidate"
34    echo "  -revision <num>  Revision to branch off (default: HEAD)"
35    echo "  -dry-run         Make no changes to the repository, just print the commands"
36}
37
38function tag_version() {
39    set -x
40    for proj in  $projects; do
41        if svn ls $base_url/$proj/branches/release_$branch_release > /dev/null 2>&1 ; then
42            if [ $rebranch = "no" ]; then
43                continue
44            fi
45            ${dryrun} svn remove -m "Removing old release_$branch_release branch for rebranching." \
46                $base_url/$proj/branches/release_$branch_release
47        fi
48        ${dryrun} svn copy -m "Creating release_$branch_release branch off revision ${revision}" \
49            -r ${revision} \
50            $base_url/$proj/trunk \
51            $base_url/$proj/branches/release_$branch_release
52    done
53    set +x
54}
55
56function tag_release_candidate() {
57    set -x
58    for proj in $projects ; do
59        if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release > /dev/null 2>&1 ; then
60            ${dryrun} svn mkdir -m "Creating release directory for release_$tag_release." $base_url/$proj/tags/RELEASE_$tag_release
61        fi
62        if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release/$rc > /dev/null 2>&1 ; then
63            ${dryrun} svn copy -m "Creating release candidate $rc from release_$tag_release branch" \
64                $base_url/$proj/branches/release_$branch_release \
65                $base_url/$proj/tags/RELEASE_$tag_release/$rc
66        fi
67    done
68    set +x
69}
70
71while [ $# -gt 0 ]; do
72    case $1 in
73        -release | --release )
74            shift
75            release=$1
76            ;;
77        -rc | --rc )
78            shift
79            rc="rc$1"
80            ;;
81        -rebranch | --rebranch )
82            rebranch="yes"
83            ;;
84        -final | --final )
85            rc="final"
86            ;;
87        -revision | --revision )
88            shift
89            revision="$1"
90            ;;
91        -dry-run | --dry-run )
92            dryrun="echo"
93            ;;
94        -h | --help | -help )
95            usage
96            exit 0
97            ;;
98        * )
99            echo "unknown option: $1"
100            usage
101            exit 1
102            ;;
103    esac
104    shift
105done
106
107if [ "x$release" = "x" ]; then
108    echo "error: need to specify a release version"
109    echo
110    usage
111    exit 1
112fi
113
114branch_release=`echo $release | sed -e 's,\([0-9]*\.[0-9]*\).*,\1,' | sed -e 's,\.,,g'`
115tag_release=`echo $release | sed -e 's,\.,,g'`
116
117if [ "x$rc" = "x" ]; then
118    tag_version
119else
120    if [ "$revision" != "HEAD" ]; then
121        echo "error: cannot use -revision with -rc"
122        echo
123        usage
124        exit 1
125    fi
126
127    tag_release_candidate
128fi
129
130exit 0
131