From b1f7b35983eade493bfadd9e5abee4ae3dab630d Mon Sep 17 00:00:00 2001 From: dbrownell Date: Wed, 7 Oct 2009 05:43:05 +0000 Subject: [PATCH] Change version labels to work better with GIT - The guess-rev.sh script is now a tweaked version of "setlocalversion" as seen in Linux, U-Boot, and various other projects. When it finds source control support (git, hg, svn) it uses IDs from there. Else (specific to this project) it reports itself as "-snapshot", e.g. from gitweb. I verified this new "guess-rev.sh" script runs under Cygwin. - Also update the generic version strings to be like "0.3.0-dev" (during development) instead of the very long "0.3.0-in-development". These also show up in the PDF docs. For better tracking, we might eventually change these strings to include the version IDs too. - Change the startup banner version strings so they include the guess-rev output. Development and release versions with GIT will be like Open On-Chip Debugger 0.3.0-dev-00282-g7191a4f-dirty (2009-10-05-20:57) Open On-Chip Debugger 0.3.0 (2009-10-05-20:57) instead of the previous SVN-specific (even when using git-svn!) Open On-Chip Debugger 0.3.0-in-development (2009-10-05-01:39) svn:exported Open On-Chip Debugger 0.3.0 (2009-10-05-01:39) Release git-svn-id: svn://svn.berlios.de/openocd/trunk@2809 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- configure.in | 2 +- doc/manual/release.txt | 6 +-- guess-rev.sh | 83 ++++++++++++++++++++++++++++++++++++++++-- src/Makefile.am | 6 ++- src/openocd.c | 2 +- tools/release.sh | 8 ++-- 6 files changed, 92 insertions(+), 15 deletions(-) diff --git a/configure.in b/configure.in index 6febcb237d..8e2881cf43 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ AC_PREREQ(2.60) -AC_INIT([openocd], [0.3.0-in-development], +AC_INIT([openocd], [0.3.0-dev], [OpenOCD Mailing List ]) AC_CONFIG_SRCDIR([src/openocd.c]) diff --git a/doc/manual/release.txt b/doc/manual/release.txt index c47796607f..2ba652de21 100644 --- a/doc/manual/release.txt +++ b/doc/manual/release.txt @@ -62,9 +62,9 @@ the minor version will @a also be zero (y = 0, z = 0). @subsection releaseversiontags Version Tags After these required numeric components, the version string may contain -one or more version tags, such as '-rc1' or '-in-development'. +one or more version tags, such as '-rc1' or '-dev'. -The trunk and all branches should have the tag '-in-development' in +The trunk and all branches should have the tag '-dev' in their version number. This tag helps developers identify reports created from the Subversion repository, and it can be detected and manipulated by the release script. Specifically, this tag will be @@ -218,7 +218,7 @@ The following steps should be followed to produce each release: - This material should be produced during the development cycle. - Add a new item for each @c NEWS-worthy contribution, when committed. -# bump library version if our API changed (not yet required) - -# Remove -in-development tag from package version: + -# Remove -dev tag from package version in configure.in: - For major/minor releases, remove version tag from trunk, @a or - For bug-fix releases, remove version tag from release branch. -# Branch or tag the required tree in the Subversion repository: diff --git a/guess-rev.sh b/guess-rev.sh index aee6770df4..7adbe2817a 100755 --- a/guess-rev.sh +++ b/guess-rev.sh @@ -1,8 +1,83 @@ -#!/bin/bash +#!/bin/sh # +# This scripts adds local version information from the version +# control systems git, mercurial (hg) and subversion (svn). +# +# Copied from Linux 2.6.32 scripts/setlocalversion and modified +# slightly to work better for OpenOCD. +# + +usage() { + echo "Usage: $0 [srctree]" >&2 + exit 1 +} + +cd "${1:-.}" || usage + +# Check for git and a git repo. +if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then + + # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore it, + # because this version is defined in the top level Makefile. + if [ -z "`git describe --exact-match 2>/dev/null`" ]; then + + # If we are past a tagged commit (like "v2.6.30-rc5-302-g72357d5"), + # we pretty print it. + if atag="`git describe 2>/dev/null`"; then + echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' + + # If we don't have a tag at all we print -g{commitish}. + else + printf '%s%s' -g $head + fi + fi + + # Is this git on svn? + if git config --get svn-remote.svn.url >/dev/null; then + printf -- '-svn%s' "`git svn find-rev $head`" + fi + + # Update index only on r/w media + [ -w . ] && git update-index --refresh --unmerged > /dev/null + + # Check for uncommitted changes + if git diff-index --name-only HEAD | grep -v "^scripts/package" \ + | read dummy; then + printf '%s' -dirty + fi + + # All done with git + exit +fi + +# Check for mercurial and a mercurial repo. +if hgid=`hg id 2>/dev/null`; then + tag=`printf '%s' "$hgid" | cut -d' ' -f2` + + # Do we have an untagged version? + if [ -z "$tag" -o "$tag" = tip ]; then + id=`printf '%s' "$hgid" | sed 's/[+ ].*//'` + printf '%s%s' -hg "$id" + fi + + # Are there uncommitted changes? + # These are represented by + after the changeset id. + case "$hgid" in + *+|*+\ *) printf '%s' -dirty ;; + esac + + # All done with mercurial + exit +fi -REV=unknown +# Check for svn and a svn repo. +if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then + rev=`echo $rev | awk '{print $NF}'` + printf -- '-svn%s' "$rev" -which svnversion > /dev/null 2>&1 && REV=`svnversion -n "$1"` + # All done with svn + exit +fi -echo -n $REV +# There's no reecognized repository; we must be a snapshot. +printf -- '-snapshot' diff --git a/src/Makefile.am b/src/Makefile.am index 9198d0cafd..a223f9512f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -28,10 +28,12 @@ AM_CPPFLAGS = \ libopenocd_la_CPPFLAGS = -DPKGBLDDATE=\"`date +%F-%R`\" +# banner output includes RELSTR appended to $VERSION from the configure script +# guess-rev.sh returns either a repository version ID or "-snapshot" if RELEASE -libopenocd_la_CPPFLAGS += -DRELSTR=\"Release\" -DPKGBLDREV=\"\" +libopenocd_la_CPPFLAGS += -DRELSTR=\"\" else -libopenocd_la_CPPFLAGS += -DRELSTR=\"svn:\" -DPKGBLDREV=\"`$(top_srcdir)/guess-rev.sh $(top_srcdir)`\" +libopenocd_la_CPPFLAGS += -DRELSTR=\"`$(top_srcdir)/guess-rev.sh $(top_srcdir)`\" endif # add default CPPFLAGS diff --git a/src/openocd.c b/src/openocd.c index 95c2f237db..86b8aaf27f 100644 --- a/src/openocd.c +++ b/src/openocd.c @@ -49,7 +49,7 @@ #define OPENOCD_VERSION \ - "Open On-Chip Debugger " VERSION " (" PKGBLDDATE ") " RELSTR PKGBLDREV + "Open On-Chip Debugger " VERSION RELSTR " (" PKGBLDDATE ")" static void print_version(void) { diff --git a/tools/release.sh b/tools/release.sh index 106799ceb2..f1ed4a73ad 100755 --- a/tools/release.sh +++ b/tools/release.sh @@ -97,7 +97,7 @@ package_info_load() { PACKAGE_VERSION="$(package_info_load_version)" [ "${RELEASE_VERSION}" ] || \ - RELEASE_VERSION=${PACKAGE_VERSION/-in-development/} + RELEASE_VERSION=${PACKAGE_VERSION/-dev/} [ "${PACKAGE_NAME}" -a "${PACKAGE_VERSION}" ] || \ die "package information is missing from configure script" @@ -427,7 +427,7 @@ do_commit() { package_info_load svn_setup_load - [ "${PACKAGE_VERSION/in-development/}" = "${PACKAGE_VERSION}" ] || \ + [ "${PACKAGE_VERSION/dev/}" = "${PACKAGE_VERSION}" ] || \ die "'${PACKAGE_NAME}-${PACKAGE_VERSION}' cannot be released" [ "${PACKAGE_VERSION%.0}" = "${PACKAGE_VERSION}" ] || \ @@ -437,7 +437,7 @@ do_commit() { do_release_step_prep() { - do_version tag remove in-development + do_version tag remove dev # reset RELEASE_VERSION now to allow release version to be detected export RELEASE_VERSION= } @@ -447,7 +447,7 @@ do_release_step_branch_bump() { local TYPE="$1" echo "Bump ${TYPE} version and add tag:" do_version_bump ${TYPE} - do_version_tag_add in-development + do_version_tag_add dev } do_release_step_branch() { do_svn_switch "${PACKAGE_BRANCH}" -- 2.30.2