Improve release script version tag management commands.
[fw/openocd] / tools / release.sh
index 8df0fa3a8c2c274bc8c6182275d05b1a17033cb3..106799ceb2a833b54b71bef0da712425e0694951 100755 (executable)
@@ -282,9 +282,10 @@ do_version_usage() {
 usage: $0 version <command>
 Version Commands:
   tag {add|remove} <label>     Add or remove the specified tag.
-  bump {major|minor|micro|rc}  Bump the specified version number;
-                               resets less-significant numbers to zero.
-                              All but 'rc' releases drop that tag.
+  bump {major|minor|micro}     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
 }
 
@@ -314,15 +315,32 @@ do_version_bump_minor() {
 do_version_bump_micro() {
        do_version_bump_sed "${PACKAGE_MAJOR_AND_MINOR}.$((PACKAGE_MICRO + 1))"
 }
-do_version_bump_rc() {
-       die "patch missing: -rc support is not implemented"
+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}1${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|rc)
-               eval "do_version_bump_${CMD}"
+       major|minor|micro|final|tag)
+               eval "do_version_bump_${CMD}" "$@"
                ;;
        *)
                do_version_usage
@@ -333,7 +351,10 @@ do_version_bump() {
 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}" && \