]>
Commit | Line | Data |
---|---|---|
b4d2b04c JH |
1 | #!/bin/sh |
2 | ||
3 | GVF=GIT-VERSION-FILE | |
3eae3087 | 4 | DEF_VER=0.21.GITGUI |
b4d2b04c JH |
5 | |
6 | LF=' | |
7 | ' | |
8 | ||
67c75759 JH |
9 | tree_search () |
10 | { | |
11 | head=$1 | |
12 | tree=$2 | |
ea449496 | 13 | for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null) |
67c75759 JH |
14 | 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 | ||
5bac4a67 JH |
23 | # 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 | # | |
67c75759 JH |
28 | # 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 | |
5bac4a67 | 35 | # try looking for a gitgui-* tag. |
67c75759 | 36 | |
5bac4a67 JH |
37 | if test -f version && |
38 | VN=$(cat version) | |
39 | then | |
40 | : happy | |
41 | elif prefix="$(git rev-parse --show-prefix 2>/dev/null)" | |
67c75759 JH |
42 | 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) | |
b4d2b04c | 46 | case "$VN" in |
67c75759 JH |
47 | gitgui-[0-9]*) : happy ;; |
48 | *) (exit 1) ;; | |
b4d2b04c JH |
49 | esac |
50 | then | |
67c75759 JH |
51 | VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g'); |
52 | elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) && | |
53 | case "$VN" in | |
54 | gitgui-[0-9]*) : happy ;; | |
55 | *) (exit 1) ;; | |
56 | esac | |
57 | then | |
58 | VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g'); | |
b4d2b04c JH |
59 | else |
60 | VN="$DEF_VER" | |
61 | fi | |
62 | ||
b4d2b04c JH |
63 | dirty=$(sh -c 'git diff-index --name-only HEAD' 2>/dev/null) || dirty= |
64 | case "$dirty" in | |
65 | '') | |
66 | ;; | |
67 | *) | |
68 | VN="$VN-dirty" ;; | |
69 | esac | |
70 | ||
71 | if test -r $GVF | |
72 | then | |
67c75759 | 73 | VC=$(sed -e 's/^GITGUI_VERSION = //' <$GVF) |
b4d2b04c JH |
74 | else |
75 | VC=unset | |
76 | fi | |
77 | test "$VN" = "$VC" || { | |
67c75759 JH |
78 | echo >&2 "GITGUI_VERSION = $VN" |
79 | echo "GITGUI_VERSION = $VN" >$GVF | |
b4d2b04c | 80 | } |