From 6f06be9bc29b5d6c21264be48316c65ade42df62 Mon Sep 17 00:00:00 2001
From: "Shawn O. Pearce" <spearce@spearce.org>
Date: Tue, 17 Nov 2009 10:25:14 -0800
Subject: [PATCH] tools/version.sh: Update embedded version numbers in build
 products

We can now use `tools/version.sh --release` to update the MANIFEST.MF
and Maven POM files with the current version number of this project,
so they appear in any build product created.

The counterpart --snapshot option be used to reset files to use
their natural *-SNAPSHOT and *.qualifier state during development.

We use a simple Bourne shell script with Perl calls because we
must edit both Maven pom.xml and OSGi bundle MANIFEST.MF in order
to store the correct data for our parallel build systems.  In the
future we should use a native Java solution which relies upon JGit
to compute the `git describe` portion.

Until we tag our first official release a "tagged snapshot" can be
made by creating an artifical annotated tag first:

  git tag -a -m "initial contribution" v0.5.1 046198cf5f21e5a63e8ec0ecde2ef3fe21db2eae
  tools/version.sh --release

Resulting in a version string like "0.5.1.50-ge16af83".

Change-Id: Ic2bbae75bf96fc8831324c62c2212131277f70e4
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 tag_jgit.sh => tools/version.sh | 88 ++++++++++++++++++++++-----------
 1 file changed, 58 insertions(+), 30 deletions(-)
 rename tag_jgit.sh => tools/version.sh (62%)

diff --git a/tag_jgit.sh b/tools/version.sh
similarity index 62%
rename from tag_jgit.sh
rename to tools/version.sh
index 77103d861..eee41f00a 100644
--- a/tag_jgit.sh
+++ b/tools/version.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com>
+# Copyright (C) 2009, Google Inc.
 # and other copyright owners as documented in the project's IP log.
 #
 # This program and the accompanying materials are made available
@@ -41,39 +41,67 @@
 # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-# Updates MANIFEST.MF files for EGit plugins.
+# Update all pom.xml and MANIFEST.MF with new build number
+#
+# TODO(spearce) This should be converted to some sort of
+# Java based Maven plugin so its fully portable.
+#
 
-v=$1
-if [ -z "$v" ]
-then
-	echo >&2 "usage: $0 version"
-	exit 1
-fi
+case "$1" in
+--snapshot=*)
+	V=$(echo "$1" | perl -pe 's/^--snapshot=//')
+	if [ -z "$V" ]
+	then
+		echo >&2 "usage: $0 --snapshot=0.n.0"
+		exit 1
+	fi
+	case "$V" in
+	*-SNAPSHOT) : ;;
+	*) V=$V-SNAPSHOT ;;
+	esac
+	;;
 
-MF=$(git ls-files | grep META-INF/MANIFEST.MF)
-MV=jgit-maven/jgit/pom.xml
-ALL="$MF $MV"
+--release)
+	V=$(git describe HEAD) || exit
+	;;
 
-replace() {
-	version=$1
+*)
+	echo >&2 "usage: $0 {--snapshot=0.n.0 | --release}"
+	exit 1
+esac
 
-	perl -pi -e 's/^(Bundle-Version:).*/$1 '$version/ $MF
-	perl -pi -e 's,^    <version>.*</version>,    <version>'$2'</version>,' $MV
-}
+case "$V" in
+v*) V=$(echo "$V" | perl -pe s/^v//) ;;
+esac
 
-replace $v $v
-git commit -s -m "JGit $v" $ALL &&
-c=$(git rev-parse HEAD) &&
+case "$V" in
+*-SNAPSHOT)
+	POM_V=$V
+	MF_V=$(echo "$V" | perl -pe 's/-SNAPSHOT$/.qualifier/')
+	;;
+*-[1-9]*-g[0-9a-f]*)
+	POM_V=$(echo "$V" | perl -pe 's/-(\d+-g.*)$/.$1/')
+	MF_V=$POM_V
+	;;
+*)
+	POM_V=$V
+	MF_V=$V
+	;;
+esac
 
-replace $v.qualifier $v-SNAPSHOT &&
-git commit -s -m "Re-add version qualifier suffix to $v" $ALL &&
+perl -pi -e '
+	s/^(Bundle-Version:).*/$1 '"$MF_V"'/
+	' $(git ls-files | grep META-INF/MANIFEST.MF)
 
-echo &&
-tagcmd="git tag -s -m 'JGit $v' v$v $c" &&
-if ! eval $tagcmd
-then
-	echo >&2
-	echo >&2 "Tag with:"
-	echo >&2 "  $tagcmd"
-	exit 1
-fi || exit
+perl -pi -e '
+	if ($ARGV ne $old_argv) {
+		$seen_version = 0;
+		$old_argv = $ARGV;
+	}
+	if (!$seen_version) {
+		$seen_version = 1 if
+		s{(<version>).*(</version>)}{${1}'"$POM_V"'${2}};
+	}
+	' $(git ls-files | grep pom.xml)
+
+git diff
-- 
GitLab