From d9deb613cdbced758c63d9ea92520bde7be28ada Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Tue, 26 Jun 2007 12:39:59 +0000 Subject: [PATCH] A script to assist in making a svn release branch. - Legacy-Id: 651 --- test/mkrelease | 170 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100755 test/mkrelease diff --git a/test/mkrelease b/test/mkrelease new file mode 100755 index 000000000..8c4299e46 --- /dev/null +++ b/test/mkrelease @@ -0,0 +1,170 @@ +#!/bin/bash + +version=0.10 +program=${0##*/} +progdir=${0%/*} +if [ "$progdir" = "$program" ]; then progdir="."; fi + +# ---------------------------------------------------------------------- +function usage() { + cat < + +COPYRIGHT + Copyright 2007 The IETF Trust. + +EOF + +} + +# ---------------------------------------------------------------------- +function die() { + echo -e "\n$program: error: $*" > /dev/stderr + exit 1 +} + +function note() { + if [ -n "$VERBOSE" ]; then echo -e "$*"; fi +} + +# ---------------------------------------------------------------------- +function version() { + echo -e "$program $version" +} + +# ---------------------------------------------------------------------- +trap 'echo "$program($LINENO): Command failed with error code $? ([$$] $0 $*)"; exit 1' ERR + + +# ---------------------------------------------------------------------- +# Option parsing + +# Options +shortopts=hpvV +longopts=help,repository,verbose,version + +# Default values +MSG="" +VERFILE=ietf/__init__.py + +if [ "$(uname)" = "Linux" ]; then + args=$(getopt -o "$shortopts" --long "$longopts" -n '$program' -- $SV "$@") + if [ $? != 0 ] ; then die "Terminating..." >&2 ; exit 1 ; fi + eval set -- "$args" + sed="sed -r" +else + # Darwin, BSDs + args=$(getopt -o$shortopts $SV $*) + if [ $? != 0 ] ; then die "Terminating..." >&2 ; exit 1 ; fi + set -- $args + sed="sed -E" +fi + +while true ; do + case "$1" in + -h| --help) usage; exit;; # Show this help, then exit + -m| --message) MSG=$2; shift;; # Specify a commit message + -v| --verbose) VERBOSE=1;; # Be more talkative + -V| --version) version; exit;; # Show program version, then exit + --) shift; break;; + *) die "Internal error, inconsistent option specification: '$1'";; + esac + shift +done + +# ---------------------------------------------------------------------- +# The program itself + +ARGMIN=1 + +if [ $# -lt $ARGMIN ]; then + usage + die "$# arguments found, $ARGMIN required" +fi + +VER=$1 + +REPO=$(svn info | grep "^Repository Root:" | awk '{ print $3 }') +RURL=$(svn info | grep "^URL:" | awk '{ print $2 }') +RDIR=${RURL#$REPO} +DIR=${RDIR#/} +if [ -z "$DIR" ]; then + die "Couldn't find anything to release here" +elif [ "${DIR%%/*}" = "trunk" ]; then + SRC="trunk" +elif [ "${DIR%%/*}" = "branch" ]; then + tmp=${DIR#*/} # get rid of 'branch/' + SRC="branch/${tmp%%/*}" # keep first subdir under branch/ +fi + +while [ "$RDIR" ]; do + [ "$RDIR" = "$prev" ] && die "Internal error" + cd .. + pwd + prev=$RDIR + RDIR=${RDIR%/*} +done + +REPO=${REPO%/} # remove trailing slash +SRC=${SRC#/} # remove leading slash + +MAJOR=${VER%.*} +MINOR=${VER#*.} +NEXT=$(( $MINOR + 1 )) +DEV="$(printf %d.%02d-dev $MAJOR $NEXT)" + +# update the version and make sure "$Rev$" is Ok +sed -i -r -e "/^__version__/s/\"[.0-9]+(-dev)?\"/\"$VER\"/" \ + -e "/^__rev__/s/\".*\"/\"\$Rev:\$\"/" \ + $SRC/$VERFILE +cat $SRC/$VERFILE +svn commit $SRC/$VERFILE -m "Release version $VER. $MSG" + +# create a new tag. +svn info $REPO/tags/$VER 2>&1 | grep -q "Not a valid URL" || die "The tag '$VER' already exists (or there was an error testing for it)." +svn cp $REPO/$SRC $REPO/tags/$VER + +# update version and revision info to indicate that the source and branch aren't releases +sed -i -r -e "/^__version__/s/\"[0-9.]*\"/\"$DEV\"/" \ + -e "/^__rev__/s/\"\\\$Rev: (.*) \\\$\"/\"\$Rev:\$ (dev) Latest release: Rev. \1 \"/" \ + $SRC/$VERFILE +cat $SRC/$VERFILE +svn commit $VERFILE -m "Development branch $DEV" + +# if SRC is 'trunk', then also create a new branch +[ $SRC = "trunk" ] && svn info $REPO/branch/$VER 2>&1 | grep -q "Not a valid URL" && svn cp $REPO/$SRC $REPO/branch/$VER +