apply: diagnose incomplete submodule object name better
[gitweb.git] / GIT-VERSION-GEN
index 49b62ea6ebc61c4af16d7d740e5b423e5787b915..b09d264a865fc6ad4a2f0acd930d82150f0e1280 100755 (executable)
@@ -1,80 +1,42 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=0.17.GITGUI
+DEF_VER=v1.8.0
 
 LF='
 '
 
-tree_search ()
-{
-       head=$1
-       tree=$2
-       for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null)
-       do
-               test $tree = $(git rev-parse $p^{tree} 2>/dev/null) &&
-               vn=$(git describe --abbrev=4 $p 2>/dev/null) &&
-               case "$vn" in
-               gitgui-[0-9]*) echo $vn; break;;
-               esac
-       done
-}
-
-# Always use the tarball version file if found, just
-# in case we are somehow contained in a larger git
-# repository that doesn't actually track our state.
-# (At least one package manager is doing this.)
-#
-# We may be a subproject, so try looking for the merge
-# commit that supplied this directory content if we are
-# not at the toplevel.  We probably will always be the
-# second parent in the commit, but we shouldn't rely on
-# that fact.
-#
-# If we are at the toplevel or the merge assumption fails
-# try looking for a gitgui-* tag.
-
-if test -f version &&
-   VN=$(cat version)
+# First see if there is a version file (included in release tarballs),
+# then try git-describe, then default.
+if test -f version
 then
-       : happy
-elif prefix="$(git rev-parse --show-prefix 2>/dev/null)"
-   test -n "$prefix" &&
-   head=$(git rev-list --max-count=1 HEAD -- . 2>/dev/null) &&
-   tree=$(git rev-parse --verify "HEAD:$prefix" 2>/dev/null) &&
-   VN=$(tree_search $head $tree)
-   case "$VN" in
-   gitgui-[0-9]*) : happy ;;
-   *) (exit 1) ;;
-   esac
+       VN=$(cat version) || VN="$DEF_VER"
+elif test -d .git -o -f .git &&
+       VN=$(git describe --match "v[0-9]*" --abbrev=7 HEAD 2>/dev/null) &&
+       case "$VN" in
+       *$LF*) (exit 1) ;;
+       v[0-9]*)
+               git update-index -q --refresh
+               test -z "$(git diff-index --name-only HEAD --)" ||
+               VN="$VN-dirty" ;;
+       esac
 then
-       VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g');
-elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
-   case "$VN" in
-   gitgui-[0-9]*) : happy ;;
-   *) (exit 1) ;;
-   esac
-then
-       VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g');
+       VN=$(echo "$VN" | sed -e 's/-/./g');
 else
        VN="$DEF_VER"
 fi
 
-dirty=$(sh -c 'git diff-index --name-only HEAD' 2>/dev/null) || dirty=
-case "$dirty" in
-'')
-       ;;
-*)
-       VN="$VN-dirty" ;;
-esac
+VN=$(expr "$VN" : v*'\(.*\)')
 
 if test -r $GVF
 then
-       VC=$(sed -e 's/^GITGUI_VERSION = //' <$GVF)
+       VC=$(sed -e 's/^GIT_VERSION = //' <$GVF)
 else
        VC=unset
 fi
 test "$VN" = "$VC" || {
-       echo >&2 "GITGUI_VERSION = $VN"
-       echo "GITGUI_VERSION = $VN" >$GVF
+       echo >&2 "GIT_VERSION = $VN"
+       echo "GIT_VERSION = $VN" >$GVF
 }
+
+