]>
Commit | Line | Data |
---|---|---|
f1cee4e6 SP |
1 | #!/bin/sh |
2 | ||
3 | GVF=GIT-VERSION-FILE | |
41188dd1 | 4 | DEF_VER=0.9.GITGUI |
f1cee4e6 SP |
5 | |
6 | LF=' | |
7 | ' | |
8 | ||
07d082bf SP |
9 | tree_search () |
10 | { | |
11 | head=$1 | |
12 | tree=$2 | |
022fef30 | 13 | for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null) |
07d082bf SP |
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 | ||
26370f73 SP |
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 | # | |
07d082bf SP |
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 | |
26370f73 | 35 | # try looking for a gitgui-* tag. |
07d082bf | 36 | |
26370f73 SP |
37 | if test -f version && |
38 | VN=$(cat version) | |
39 | then | |
40 | : happy | |
41 | elif prefix="$(git rev-parse --show-prefix 2>/dev/null)" | |
07d082bf SP |
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) | |
46 | case "$VN" in | |
47 | gitgui-[0-9]*) : happy ;; | |
48 | *) (exit 1) ;; | |
49 | esac | |
50 | then | |
51 | VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g'); | |
52 | elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) && | |
f1cee4e6 | 53 | case "$VN" in |
6a6459bc | 54 | gitgui-[0-9]*) : happy ;; |
07d082bf | 55 | *) (exit 1) ;; |
f1cee4e6 SP |
56 | esac |
57 | then | |
6a6459bc | 58 | VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g'); |
f1cee4e6 SP |
59 | else |
60 | VN="$DEF_VER" | |
61 | fi | |
62 | ||
f1cee4e6 SP |
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 | |
7e81d4ee | 73 | VC=$(sed -e 's/^GITGUI_VERSION = //' <$GVF) |
f1cee4e6 SP |
74 | else |
75 | VC=unset | |
76 | fi | |
77 | test "$VN" = "$VC" || { | |
7e81d4ee SP |
78 | echo >&2 "GITGUI_VERSION = $VN" |
79 | echo "GITGUI_VERSION = $VN" >$GVF | |
f1cee4e6 | 80 | } |