summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-02-12 22:05:10 (GMT)
committerShawn O. Pearce <spearce@spearce.org>2007-02-12 22:05:10 (GMT)
commit07d082bf5b4bc353648ffd207fe2fbd9e57e4386 (patch)
tree481061eaf23d64cafe562d36d9b3db8a1d1d0695
parent6a6459bc8f1aa9e83b5b46f7c40454891bf5e92a (diff)
downloadgit-07d082bf5b4bc353648ffd207fe2fbd9e57e4386.zip
git-07d082bf5b4bc353648ffd207fe2fbd9e57e4386.tar.gz
git-07d082bf5b4bc353648ffd207fe2fbd9e57e4386.tar.bz2
git-gui: Guess our version accurately as a subproject.
When we are included as a subproject, such as how git.git carries us, we want to retain our own version number and not the version number assigned by git.git's own tags. Consequently we need to locate the correct tag which applies to our tree content and its commit lineage. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rwxr-xr-xGIT-VERSION-GEN41
1 files changed, 37 insertions, 4 deletions
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index d308748..9fc80a6 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -6,12 +6,45 @@ DEF_VER=0.5.GIT
LF='
'
-# First try git-describe, then see if there is a version file
-# (included in release tarballs), then default
-if VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
+tree_search ()
+{
+ head=$1
+ tree=$2
+ for p in $(git rev-list --parents --max-count=1 $head 2>/devnull)
+ 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
+}
+
+# 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, or fallback onto the
+# distributed version file.
+
+if 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
+then
+ VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g');
+elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
case "$VN" in
- *$LF*) (exit 1) ;;
gitgui-[0-9]*) : happy ;;
+ *) (exit 1) ;;
esac
then
VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g');