X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=guess-rev.sh;h=7adbe2817a43f1bac90da1cb716f605fb9d7fe80;hp=c561be56e83e21307aa581f5a99b072c3b47963e;hb=70b15f989f09428a85d6e52d8a03dc902081eb01;hpb=ae76a671b54935c78351d9cb787cf6324e375e89 diff --git a/guess-rev.sh b/guess-rev.sh index c561be56e8..7adbe2817a 100755 --- a/guess-rev.sh +++ b/guess-rev.sh @@ -1,9 +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 -REV=unknown + # All done with mercurial + exit +fi -which svnversion > /dev/null 2>&1 && REV=`svnversion -n` +# 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" -echo -n $REV + # All done with svn + exit +fi +# There's no reecognized repository; we must be a snapshot. +printf -- '-snapshot'