more version magic for Mac and Windows installers

Dirk Hohndel dirk at hohndel.org
Sat Feb 23 20:51:31 PST 2013


As the commit message says, I would like people who are better in shell
programming to review this code - this isn't supposed to be a "best
shell script contest winner", but should work and be reasonably robust.

The other reason why I'm posting this here is to make people aware of
what I'm doing with these stupid version numbers, that are mostly for my
convenience when building installers on Windows and Mac (but might be
used by people doing Linux packages as well - I don't know).

/D

commit 069c36c95ca14ef1d4e8c14ea0a674546f1c03d5
Author: Dirk Hohndel <dirk at hohndel.org>
Date:   Sat Feb 23 20:38:30 2013 -0800

    Expand the version magic even more
    
    Someone who is better at shell script writing needs to review this.
    
    Here's what it's supposed to do. Create version strings with three or four
    values for darwin or win, respectively, that we can use as the versions of
    the bundle or installer. The version that Subsurface reports isn't
    affected by this. So in a way this is automating something that's mostly
    cosmetic.
    
    If we have a 2 digit version number (like 3.0), do the same the old script
    did - add just zeroes if we are on a tag, otherwise add the number of
    commits since the tag (and a last 0 if on win).
    
    If we have a 3 digit version numner (like 3.0.1), leave it alone on mac
    and add either the number of commits since the tag or a zero if we are on
    the tag on win.
    
    Now this can create the same version number for two different versions on
    darwin: the first commit after 3.0 and the version tagged as 3.0.1 will
    both get the same number. That's kinda silly but remember - the non-tagged
    versions aren't supposed to be widely distributed (and the third digit in
    them should be much larger than anything we'd ever release; we are
    already on commit 16 since the last tag and hopefully will never release a
    3.0.16 as tagged release). And of course the full version as displayed in
    the About box is always able to tell things apart because of the SHA added
    at the end if it's a non-tagged version.
    
    So why all this magic? The reason we do this is so that during development
    we are able to create Mac and Windows installers and they get reasonable
    version numbers, based on the versioning that these vendors suppose. And
    without manual intervention.
    
    Signed-off-by: Dirk Hohndel <dirk at hohndel.org>

diff --git a/scripts/get-version b/scripts/get-version
index c59e200..4da0185 100755
--- a/scripts/get-version
+++ b/scripts/get-version
@@ -30,24 +30,27 @@ case $os in
 		v=$v0
 		;;
 	darwin|win)
+		# just the dots in the version string - this way we can
+		# count them
+		dots="${v0//[^.]}"
 		# split version string using a '-' separator
 		IFS='-'
 		set -- $v0
-		v1=$1
-		if [ $# -gt 1 ]; then
-			v1=$v1.$2
-		else
-			v1=$v1.0
+		v=$1
+		# do we need to add another digit?
+		# We know there are 1 or 2 dots in $v, so if it's just one
+		# or we are trying to get to 4, add one digit
+		if [ ${#dots} -eq 1 ] || [ $os == "win" ]; then
+			if [ $# -gt 1 ]; then
+				v=$v.$2
+			else
+				v=$v.0
+			fi
+		fi
+		# and if it was just one dot and we want 4, at another 0
+		if [ ${#dots} -eq 1 ] && [ $os == "win" ]; then
+			v=$v.0
 		fi
-		case $os in
-			darwin)
-				v=$v1
-				;;
-			win)
-				# always add '0' as the 4:th digit
-				v=$v1.0
-				;;
-		esac
 		;;
 	*)
 		v='git.missing.please.hardcode.version'


More information about the subsurface mailing list