aft: Unify handling of hash and path duplicates.
[paraslash.git] / GIT-VERSION-GEN
index a64d796..b8abff3 100755 (executable)
@@ -1,45 +1,42 @@
-#!/bin/sh
-
-if test $# -ne 1; then
-       echo >&2 "usage: $0 <version file>"
-       exit 1
-fi
+#!/usr/bin/env bash
 
 
+(($# > 1)) && { echo >&2 "usage: $0 [<version file>]"; exit 1; }
 GVF="$1"
 GVF="$1"
-DEF_VER="unnamed_version"
 
 
+DEF_VER="unnamed_version"
 LF='
 '
 
 # First see if there is a version file (included in release tarballs),
 LF='
 '
 
 # First see if there is a version file (included in release tarballs),
-# then try git-describe, then default.
-if test -f VERSION
-then
+# then try git-describe, then gitweb, then default.
+if [[ -f VERSION ]]; then
        VN=$(cat VERSION) || VN="$DEF_VER"
        VN=$(cat VERSION) || VN="$DEF_VER"
-elif test -d .git -o -f .git &&
+elif [[ -d .git || -f .git ]] &&
        VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
        case "$VN" in
        *$LF*) (exit 1) ;;
        v[0-9]*)
        VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
        case "$VN" in
        *$LF*) (exit 1) ;;
        v[0-9]*)
-               git update-index -q --refresh
+               git update-index -q --refresh &>/dev/null
                test -z "$(git diff-index --name-only HEAD --)" ||
                VN="$VN-dirty" ;;
        esac
 then
        VN=$(echo "$VN" | sed -e 's/-/./g');
                test -z "$(git diff-index --name-only HEAD --)" ||
                VN="$VN-dirty" ;;
        esac
 then
        VN=$(echo "$VN" | sed -e 's/-/./g');
+elif [[ "$PWD" =~ paraslash-[a-f0-9]{1,} ]]; then
+       VN="${PWD#*-}"
 else
        VN="$DEF_VER"
 fi
 
 VN=$(expr "$VN" : v*'\(.*\)')
 else
        VN="$DEF_VER"
 fi
 
 VN=$(expr "$VN" : v*'\(.*\)')
+echo "$VN"
 
 
-if test -r $GVF
-then
-       VC=$(sed -e 's/^GIT_VERSION = //' <$GVF)
-else
-       VC=unset
+[[ -z "$GVF" ]] && exit 0
+if [[ -r "$GVF" ]]; then
+       pattern='^#define GIT_VERSION "'
+       VC=$(grep "$pattern" < "$GVF" | sed -e "s/$pattern//; s/\"$//")
+       [[ "$VN" == "$VC" ]] && exit 0
 fi
 fi
-test "$VN" = "$VC" || {
-       echo >&2 "GIT_VERSION = $VN"
-       echo "GIT_VERSION = $VN" >$GVF
-}
+echo >&2 "new git version: $VN"
+echo "/** \\file ${GVF##*/} Auto-generated version file. Do not edit. */" >$GVF
+echo "#define GIT_VERSION \"$VN\"" >> $GVF