#!/bin/bash #===-- tag.sh - Tag the LLVM release candidates ----------------------------===# # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # #===------------------------------------------------------------------------===# # # Create branches and release candidates for the LLVM release. # #===------------------------------------------------------------------------===# set -e release="" rc="" rebranch="no" # All the projects that make it into the monorepo, plus test-suite. projects="monorepo-root cfe clang-tools-extra compiler-rt debuginfo-tests libclc libcxx libcxxabi libunwind lld lldb llgo llvm openmp parallel-libs polly pstl test-suite" dryrun="" revision="HEAD" base_url="https://llvm.org/svn/llvm-project" usage() { echo "usage: `basename $0` -release [-rebranch] [-revision ] [-dry-run]" echo "usage: `basename $0` -release -rc [-dry-run]" echo " " echo " -release The version number of the release" echo " -rc The release candidate number" echo " -rebranch Remove existing branch, if present, before branching" echo " -final Tag final release candidate" echo " -revision Revision to branch off (default: HEAD)" echo " -dry-run Make no changes to the repository, just print the commands" } tag_version() { local remove_args=() local create_args=() local message_prefix set -x 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 remove_args+=(rm "$proj/branches/release_$branch_release") fi create_args+=(cp ${revision} "$proj/trunk" "$proj/branches/release_$branch_release") done if [[ ${#remove_args[@]} -gt 0 ]]; then message_prefix="Removing and recreating" else message_prefix="Creating" fi if [[ ${#create_args[@]} -gt 0 ]]; then ${dryrun} svnmucc --root-url "$base_url" \ -m "$message_prefix release_$branch_release branch off revision ${revision}" \ "${remove_args[@]}" "${create_args[@]}" fi set +x } tag_release_candidate() { local create_args=() set -x for proj in $projects ; do if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release > /dev/null 2>&1 ; then create_args+=(mkdir "$proj/tags/RELEASE_$tag_release") fi if ! svn ls $base_url/$proj/tags/RELEASE_$tag_release/$rc > /dev/null 2>&1 ; then create_args+=(cp HEAD "$proj/branches/release_$branch_release" "$proj/tags/RELEASE_$tag_release/$rc") fi done if [[ ${#create_args[@]} -gt 0 ]]; then ${dryrun} svnmucc --root-url "$base_url" \ -m "Creating release candidate $rc from release_$tag_release branch" \ "${create_args[@]}" fi set +x } while [ $# -gt 0 ]; do case $1 in -release | --release ) shift release=$1 ;; -rc | --rc ) 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 ;; * ) echo "unknown option: $1" usage exit 1 ;; esac shift done if [ "$release" = "" ]; then echo "error: need to specify a release version" echo usage exit 1 fi 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 [ "$rc" = "" ]; 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 0