]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
SCRIPTS: make announce release support preparing announces before tag exists
authorWilly Tarreau <w@1wt.eu>
Wed, 6 Jan 2021 14:46:33 +0000 (15:46 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 6 Jan 2021 14:49:44 +0000 (15:49 +0100)
It takes so much time to write an announce message that sometimes it's
annoying not being able to start the work while a fix is being finished.
With the new "-p" argument, announce-release will allow to prepare the
announce message for the current HEAD and with no tag yet. It will
restart from the last tag and automatically increment the version using
the same algorithm as create-release so that everything is accurate. It
should then be easier at the last moment to just include the final entry
by hand when the last fix finally arrives. For convenience, this argument
also allows to create an announce from another branch than master.

scripts/announce-release

index 385b18f88e23362c3223a5cd08e2900c900316ca..eb3cb8c798e02ac280a77849647c878bbc1c4da0 100755 (executable)
@@ -10,8 +10,9 @@
 #   - creates web-$version.html
 #   - indicates how to edit the mail and how to send it
 
-USAGE="Usage: ${0##*/} [-f] [-b branch] [-d date] [-o oldver] [-n newver]
+USAGE="Usage: ${0##*/} [-f] [-p] [-b branch] [-d date] [-o oldver] [-n newver]
   -f: force to overwrite existing files and ignore local changes
+  -p: prepare future relase (skip branch and tags existence checks)
   -b: force the project branch name to this (def: inherited from the version)
   -d: force the release date (e.g. to rework a failed announce)
   -o: previous version (def: newver-1)
@@ -49,6 +50,7 @@ while [ -n "$1" -a -z "${1##-*}" ]; do
                -d)        DATE="$2"      ; shift 2 ;;
                -b)        BRANCH="$2"    ; shift 2 ;;
                -f)        FORCE=1        ; shift   ;;
+               -p)        PREPARE=1      ; shift   ;;
                -o)        OLD="$2"       ; shift 2 ;;
                -n)        NEWVER="$2"    ; shift 2 ;;
                -h|--help) quit "$USAGE" ;;
@@ -74,7 +76,7 @@ if [ -z "$FORCE" -a "$(git diff HEAD|wc -c)" != 0 ]; then
        die
 fi
 
-if [ "$(git rev-parse --verify -q HEAD)" != "$(git rev-parse --verify -q master)" ]; then
+if [ -z "$PREPARE" -a "$(git rev-parse --verify -q HEAD)" != "$(git rev-parse --verify -q master)" ]; then
        die "git HEAD doesn't match master branch."
 fi
 
@@ -92,7 +94,30 @@ if [ -z "$NEWTAG" ]; then
 
        if [ -z "$NEWTAG" ]; then
                die "Fatal: cannot determine new version, please specify it."
-
+       elif [ -n "$PREPARE" ] && ! git show-ref --tags HEAD >/dev/null; then
+               # HEAD not tagged, hence we have to pretend we're on one version
+               # after the current tag
+               echo "Current version not tagged, trying to determine next one."
+               NEWTAG="${NEWTAG#v}"
+               if [ -z "$OLD" ]; then
+                       OLD="$NEWTAG"
+               fi
+               radix="$NEWTAG"
+               while [ -n "$radix" -a -z "${radix%%*[0-9]}" ]; do
+                       radix="${radix%[0-9]}"
+               done
+
+               number=${NEWTAG#$radix}
+               if [ -z "$number" -o "$radix" = "$NEWTAG" ]; then
+                       die "Fatal: cannot determine new version, please specify it."
+               fi
+               NEWTAG="${radix}$((number+1))"
+               if [ -z "$NEWVER" ]; then
+                       NEWVER="${NEWTAG}"
+               fi
+               NEWTAG="v$NEWTAG"
+               LASTCOM="$(git rev-parse --short HEAD)"
+               echo "Next version expected to be $NEWVER and next tag $NEWTAG based on commit $LASTCOM"
        elif [ "$(git describe --tags HEAD)" != "$NEWTAG" ]; then
                die "About to use current HEAD which doesn't seem tagged, it reports '$(git describe --tags HEAD 2>/dev/null)'. Did you release it ?"
        fi