From e57a6c5e6298e1685bfaed1e897d8b0b1fd8a549 Mon Sep 17 00:00:00 2001 From: Philippe Pepiot Date: Sat, 16 Apr 2011 20:52:28 +0200 Subject: [PATCH] build system: add setlocalversion Version is built from git commit id, for example wmfs-ga33ec04-dirty -> 'g', this is a git repo -> a33ec04 is the beginning of the commit id (sha1) -> dirty mean that there is uncommitted changes wmfs users gives their 'wmfs -v' and developers can easily identify wmfs version. Move status.sh to scripts/ with setlocalversion Signed-off-by: Philippe Pepiot --- Makefile.in | 2 +- scripts/setlocalversion | 72 +++++++++++++++++++++++++++++++++++++++ {rc => scripts}/status.sh | 0 src/infobar.c | 2 +- src/wmfs.c | 2 +- 5 files changed, 75 insertions(+), 3 deletions(-) create mode 100755 scripts/setlocalversion rename {rc => scripts}/status.sh (100%) diff --git a/Makefile.in b/Makefile.in index a17a550..2164f6b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -2,7 +2,7 @@ PROG=wmfs MAN=wmfs.1 # wmfs version -VERSION= 201011 +VERSION=$(shell scripts/setlocalversion) SRCS= \ src/barwin.c \ diff --git a/scripts/setlocalversion b/scripts/setlocalversion new file mode 100755 index 0000000..cc2c128 --- /dev/null +++ b/scripts/setlocalversion @@ -0,0 +1,72 @@ +#!/bin/sh +# Print additional version information for non-release trees. + +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 + # Do we have an untagged version? + if git name-rev --tags HEAD | grep -E '^HEAD[[:space:]]+(.*~[0-9]*|undefined)$' > /dev/null; then + if tag=`git describe 2>/dev/null`; then + echo $tag | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}' + 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 + + # Are there uncommitted changes? + git update-index --refresh --unmerged > /dev/null + 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 + +# 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}'` + changes=`svn status 2>/dev/null | grep '^[AMD]' | wc -l` + + # Are there uncommitted changes? + if [ $changes != 0 ]; then + printf -- '-svn%s%s' "$rev" -dirty + else + printf -- '-svn%s' "$rev" + fi + + # All done with svn + exit +fi diff --git a/rc/status.sh b/scripts/status.sh similarity index 100% rename from rc/status.sh rename to scripts/status.sh diff --git a/src/infobar.c b/src/infobar.c index 660c023..b89f5a9 100644 --- a/src/infobar.c +++ b/src/infobar.c @@ -127,7 +127,7 @@ infobar_init(void) barwin_refresh(infobar[sc].bar); /* Default statustext is set here */ - infobar[sc].statustext = xstrdup(WMFS_VERSION); + infobar[sc].statustext = xstrdup("wmfs"WMFS_VERSION); infobar_draw(sc); } diff --git a/src/wmfs.c b/src/wmfs.c index f73fb38..3e45f4a 100644 --- a/src/wmfs.c +++ b/src/wmfs.c @@ -486,7 +486,7 @@ main(int argc, char **argv) break; case 'v': - printf("WMFS "WMFS_VERSION"\n"); + printf("wmfs"WMFS_VERSION"\n"); exit(EXIT_SUCCESS); break;