]> git.sur5r.net Git - openocd/commitdiff
Factor version munging capabilities out of release.sh.
authorZachary T Welch <zw@superlucidity.net>
Wed, 21 Oct 2009 00:12:17 +0000 (17:12 -0700)
committerZachary T Welch <zw@superlucidity.net>
Wed, 28 Oct 2009 06:20:24 +0000 (23:20 -0700)
tools/release/version.sh [new file with mode: 0755]

diff --git a/tools/release/version.sh b/tools/release/version.sh
new file mode 100755 (executable)
index 0000000..bef79d0
--- /dev/null
@@ -0,0 +1,137 @@
+#!/bin/sh -e
+# version.sh: openocd version process automation
+# Copyright (C) 2009 by Zachary T Welch <zw@superlucidity.net>
+# Release under the GNU GPL v2 (or later versions).
+
+source "tools/release/helpers.sh"
+
+do_version_usage() {
+       cat << USAGE
+usage: $0 <command>
+Version Commands:
+  tag {add|remove} <label>     Add or remove the specified tag.
+  bump {major|minor|micro|rc}  Bump the specified version number, and
+                               reset less-significant numbers to zero.
+  bump tag <label>             Add or bump a versioned tag (e.g. -rcN).
+  bump final <label>           Remove a versioned tag (e.g. -rcN).
+USAGE
+}
+
+do_version_sed() {
+       local OLD_VERSION="${PACKAGE_VERSION}"
+       local NEW_VERSION="$1"
+       local MSG="$2"
+
+       sed -i -e "/AC_INIT/ s|${OLD_VERSION}|${NEW_VERSION}|" configure.in
+       package_info_load
+       echo "${MSG}: ${OLD_VERSION} -> ${NEW_VERSION}"
+}
+do_version_bump_sed() {
+       local NEW_VERSION="$1"
+       [ -z "${PACKAGE_VERSION_TAGS}" ] || \
+               NEW_VERSION="${NEW_VERSION}${PACKAGE_VERSION_TAGS}"
+
+       do_version_sed "${NEW_VERSION}" \
+               "Bump ${CMD} package version number"
+}
+do_version_bump_major() {
+       do_version_bump_sed "$((PACKAGE_MAJOR + 1)).0.0"
+}
+do_version_bump_minor() {
+       do_version_bump_sed "${PACKAGE_MAJOR}.$((PACKAGE_MINOR + 1)).0"
+}
+do_version_bump_micro() {
+       do_version_bump_sed "${PACKAGE_MAJOR_AND_MINOR}.$((PACKAGE_MICRO + 1))"
+}
+do_version_bump_tag() {
+       local TAG="$1"
+       [ "${TAG}" ] || die "TAG argument is missing"
+       local TAGS="${PACKAGE_VERSION_TAGS}"
+       if has_version_tag "${TAG}"; then
+               local RC=$(do_version_tag_value "${TAG}")
+               RC=$((${RC} + 1))
+               TAGS=$(echo ${TAGS} | perl -npe "s/-${TAG}[\\d]*/-${TAG}${RC}/")
+       else
+               TAGS="-${TAG}0${PACKAGE_VERSION_TAGS}"
+       fi
+       PACKAGE_VERSION_TAGS="${TAGS}"
+       do_version_bump_sed "${PACKAGE_VERSION_BASE}"
+}
+do_version_bump_final() {
+       local TAG="$1"
+       [ "${TAG}" ] || die "TAG argument is missing"
+       has_version_tag "${TAG}" || die "-${TAG} tag is missing"
+       do_version_tag_remove "${TAG}$(do_version_tag_value "${TAG}")"
+}
+do_version_bump() {
+       CMD="$1"
+       shift
+       case "${CMD}" in
+       major|minor|micro|final|tag)
+               "do_version_bump_${CMD}" "$@"
+               ;;
+       rc)
+               do_version_bump_tag "rc"
+               ;;
+       *)
+               do_version_usage
+               ;;
+       esac
+}
+
+has_version_tag() {
+       test "${PACKAGE_VERSION/-${1}/}" != "${PACKAGE_VERSION}"
+}
+do_version_tag_value() {
+       local TAG="$1"
+       echo ${PACKAGE_VERSION_TAGS} | perl -ne "/-${TAG}"'(\d+)/ && print $1'
+}
+do_version_tag_add() {
+       local TAG="$1"
+       has_version_tag "${TAG}" && \
+               die "error: tag '-${TAG}' exists in '${PACKAGE_VERSION}'"
+       do_version_sed "${PACKAGE_VERSION}-${TAG}" \
+               "Add '-${TAG}' version tag"
+}
+do_version_tag_remove() {
+       local TAG="$1"
+       has_version_tag "${TAG}" || \
+               die "error: tag '-${TAG}' missing from '${PACKAGE_VERSION}'"
+       do_version_sed "${PACKAGE_VERSION/-${TAG}/}" \
+               "Remove '-${TAG}' version tag"
+}
+do_version_tag() {
+       CMD="$1"
+       shift
+       case "${CMD}" in
+       add|remove)
+               local i=
+               for i in "$@"; do
+                       "do_version_tag_${CMD}" "${i}"
+               done
+               ;;
+       *)
+               do_version_usage
+               ;;
+       esac
+}
+
+do_version() {
+       CMD="$1"
+       shift
+       case "${CMD}" in
+       tag|bump)
+               "do_version_${CMD}" "$@"
+               ;;
+       commit)
+               do_version_commit "$@"
+               ;;
+       *)
+               do_version_usage
+               ;;
+       esac
+}
+
+package_info_load
+do_version "$@"
+