diff options
-rwxr-xr-x | GIT-VERSION-GEN | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index d3087489c5..9fc80a656c 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'); |