diff --git a/git-gui/GIT-VERSION-GEN b/git-gui/GIT-VERSION-GEN index 79f1c527ff..8fac8cb410 100755 --- a/git-gui/GIT-VERSION-GEN +++ b/git-gui/GIT-VERSION-GEN @@ -1,20 +1,53 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v0.5.GIT +DEF_VER=0.6.GITGUI 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 - *$LF*) (exit 1) ;; - v[0-9]*) : happy ;; + gitgui-[0-9]*) : happy ;; + *) (exit 1) ;; esac then - VN=$(echo "$VN" | sed -e 's/-/./g'); + VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g'); +elif VN=$(git describe --abbrev=4 HEAD 2>/dev/null) && + case "$VN" in + gitgui-[0-9]*) : happy ;; + *) (exit 1) ;; + esac +then + VN=$(echo "$VN" | sed -e 's/^gitgui-//;s/-/./g'); elif test -f version then VN=$(cat version) || VN="$DEF_VER" @@ -22,8 +55,6 @@ else VN="$DEF_VER" fi -VN=$(expr "$VN" : v*'\(.*\)') - dirty=$(sh -c 'git diff-index --name-only HEAD' 2>/dev/null) || dirty= case "$dirty" in '') @@ -34,13 +65,13 @@ esac if test -r $GVF then - VC=$(sed -e 's/^GIT_VERSION = //' <$GVF) + VC=$(sed -e 's/^GITGUI_VERSION = //' <$GVF) else VC=unset fi test "$VN" = "$VC" || { - echo >&2 "GIT_VERSION = $VN" - echo "GIT_VERSION = $VN" >$GVF + echo >&2 "GITGUI_VERSION = $VN" + echo "GITGUI_VERSION = $VN" >$GVF } diff --git a/git-gui/Makefile b/git-gui/Makefile index 8fade69127..fd82d9d16d 100644 --- a/git-gui/Makefile +++ b/git-gui/Makefile @@ -12,18 +12,22 @@ ifndef SHELL_PATH SHELL_PATH = /bin/sh endif -gitexecdir := $(shell git --exec-path) -INSTALL = install +ifndef gitexecdir + gitexecdir := $(shell git --exec-path) +endif + +ifndef INSTALL + INSTALL = install +endif DESTDIR_SQ = $(subst ','\'',$(DESTDIR)) gitexecdir_SQ = $(subst ','\'',$(gitexecdir)) - SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh rm -f $@ $@+ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \ - -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \ + -e 's/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \ $@.sh >$@+ chmod +x $@+ mv $@+ $@ @@ -31,7 +35,7 @@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh $(GITGUI_BUILT_INS): git-gui rm -f $@ && ln git-gui $@ -# These can record GIT_VERSION +# These can record GITGUI_VERSION $(patsubst %.sh,%,$(SCRIPT_SH)): GIT-VERSION-FILE all:: $(ALL_PROGRAMS) @@ -41,8 +45,12 @@ install: all $(INSTALL) git-gui '$(DESTDIR_SQ)$(gitexecdir_SQ)' $(foreach p,$(GITGUI_BUILT_INS), rm -f '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git-gui' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;) +dist-version: + @mkdir -p $(TARDIR) + @echo $(GITGUI_VERSION) > $(TARDIR)/version + clean:: rm -f $(ALL_PROGRAMS) GIT-VERSION-FILE -.PHONY: all install clean +.PHONY: all install dist-version clean .PHONY: .FORCE-GIT-VERSION-FILE diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh index ea16be43ac..f5010dd47a 100755 --- a/git-gui/git-gui.sh +++ b/git-gui/git-gui.sh @@ -2,7 +2,7 @@ # Tcl ignores the next line -*- tcl -*- \ exec wish "$0" -- "$@" -set appvers {@@GIT_VERSION@@} +set appvers {@@GITGUI_VERSION@@} set copyright { Copyright © 2006, 2007 Shawn Pearce, Paul Mackerras.