git-gui: Prefer version file over git-describe.
authorShawn O. Pearce <spearce@spearce.org>
Wed, 14 Feb 2007 06:55:16 +0000 (01:55 -0500)
committerShawn O. Pearce <spearce@spearce.org>
Wed, 14 Feb 2007 06:55:16 +0000 (01:55 -0500)
Some distributions are using Git for part of their package
management system, but unpack Git's own source code for
delivery from the .tar.gz. This means that when we walk
up the directory tree with git-describe to locate a Git
repository, the repository we find is for the distribution
and *not* for git-gui. Consequently any tag we might find
there is bogus and does not apply to us.

In this case the version file should always exist and be
readable, as the packager is working from the released
.tar.gz sources. So we should always favor the version
file over anything git-describe guess for us.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
GIT-VERSION-GEN
index 9966126da2682f7b7d65b71a3225dddd1b5fe55b..2741c1e14c4f38b33d10c1679b48c4fc5d9c5587 100755 (executable)
@@ -20,6 +20,11 @@ tree_search ()
        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
@@ -27,10 +32,13 @@ tree_search ()
 # that fact.
 #
 # If we are at the toplevel or the merge assumption fails
-# try looking for a gitgui-* tag, or fallback onto the
-# distributed version file.
+# try looking for a gitgui-* tag.
 
-if prefix="$(git rev-parse --show-prefix 2>/dev/null)"
+if test -f version &&
+   VN=$(cat 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) &&
@@ -48,9 +56,6 @@ elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
    esac
 then
        VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g');
-elif test -f version
-then
-       VN=$(cat version) || VN="$DEF_VER"
 else
        VN="$DEF_VER"
 fi