blob: 1fb4d9b4b7393d2c803457365127692fb093338f [file] [log] [blame]
Junio C Hamanob4d2b042007-02-11 23:04:00 -08001#!/bin/sh
2
3GVF=GIT-VERSION-FILE
Junio C Hamano12644fa2010-09-15 12:34:37 -07004DEF_VER=0.13.GITGUI
Junio C Hamanob4d2b042007-02-11 23:04:00 -08005
6LF='
7'
8
Junio C Hamano67c75752007-02-12 16:07:29 -08009tree_search ()
10{
11 head=$1
12 tree=$2
Junio C Hamanoea449492007-02-13 13:48:52 -080013 for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null)
Junio C Hamano67c75752007-02-12 16:07:29 -080014 do
15 test $tree = $(git rev-parse $p^{tree} 2>/dev/null) &&
16 vn=$(git describe --abbrev=4 $p 2>/dev/null) &&
17 case "$vn" in
18 gitgui-[0-9]*) echo $vn; break;;
19 esac
20 done
21}
22
Junio C Hamano5bac4a62007-02-21 11:09:57 -080023# Always use the tarball version file if found, just
24# in case we are somehow contained in a larger git
25# repository that doesn't actually track our state.
26# (At least one package manager is doing this.)
27#
Junio C Hamano67c75752007-02-12 16:07:29 -080028# We may be a subproject, so try looking for the merge
29# commit that supplied this directory content if we are
30# not at the toplevel. We probably will always be the
31# second parent in the commit, but we shouldn't rely on
32# that fact.
33#
34# If we are at the toplevel or the merge assumption fails
Junio C Hamano5bac4a62007-02-21 11:09:57 -080035# try looking for a gitgui-* tag.
Junio C Hamano67c75752007-02-12 16:07:29 -080036
Junio C Hamano5bac4a62007-02-21 11:09:57 -080037if test -f version &&
38 VN=$(cat version)
39then
40 : happy
41elif prefix="$(git rev-parse --show-prefix 2>/dev/null)"
Junio C Hamano67c75752007-02-12 16:07:29 -080042 test -n "$prefix" &&
43 head=$(git rev-list --max-count=1 HEAD -- . 2>/dev/null) &&
44 tree=$(git rev-parse --verify "HEAD:$prefix" 2>/dev/null) &&
45 VN=$(tree_search $head $tree)
Junio C Hamanob4d2b042007-02-11 23:04:00 -080046 case "$VN" in
Junio C Hamano67c75752007-02-12 16:07:29 -080047 gitgui-[0-9]*) : happy ;;
48 *) (exit 1) ;;
Junio C Hamanob4d2b042007-02-11 23:04:00 -080049 esac
50then
Junio C Hamano67c75752007-02-12 16:07:29 -080051 VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g');
52elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) &&
53 case "$VN" in
54 gitgui-[0-9]*) : happy ;;
55 *) (exit 1) ;;
56 esac
57then
58 VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g');
Junio C Hamanob4d2b042007-02-11 23:04:00 -080059else
60 VN="$DEF_VER"
61fi
62
Junio C Hamanob4d2b042007-02-11 23:04:00 -080063dirty=$(sh -c 'git diff-index --name-only HEAD' 2>/dev/null) || dirty=
64case "$dirty" in
65'')
66 ;;
67*)
68 VN="$VN-dirty" ;;
69esac
70
71if test -r $GVF
72then
Junio C Hamano67c75752007-02-12 16:07:29 -080073 VC=$(sed -e 's/^GITGUI_VERSION = //' <$GVF)
Junio C Hamanob4d2b042007-02-11 23:04:00 -080074else
75 VC=unset
76fi
77test "$VN" = "$VC" || {
Junio C Hamano67c75752007-02-12 16:07:29 -080078 echo >&2 "GITGUI_VERSION = $VN"
79 echo "GITGUI_VERSION = $VN" >$GVF
Junio C Hamanob4d2b042007-02-11 23:04:00 -080080}