diff --git a/.gitignore b/.gitignore index 5bda901aeb..c714d382e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +GIT-VERSION-FILE git-citool git-gui diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN new file mode 100755 index 0000000000..79f1c527ff --- /dev/null +++ b/GIT-VERSION-GEN @@ -0,0 +1,46 @@ +#!/bin/sh + +GVF=GIT-VERSION-FILE +DEF_VER=v0.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) && + case "$VN" in + *$LF*) (exit 1) ;; + v[0-9]*) : happy ;; + esac +then + VN=$(echo "$VN" | sed -e 's/-/./g'); +elif test -f version +then + VN=$(cat version) || VN="$DEF_VER" +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 +'') + ;; +*) + VN="$VN-dirty" ;; +esac + +if test -r $GVF +then + VC=$(sed -e 's/^GIT_VERSION = //' <$GVF) +else + VC=unset +fi +test "$VN" = "$VC" || { + echo >&2 "GIT_VERSION = $VN" + echo "GIT_VERSION = $VN" >$GVF +} + + diff --git a/Makefile b/Makefile index 606bec640e..8fade69127 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,12 @@ all:: +GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE + @$(SHELL_PATH) ./GIT-VERSION-GEN +-include GIT-VERSION-FILE + SCRIPT_SH = git-gui.sh GITGUI_BUILT_INS = git-citool ALL_PROGRAMS = $(GITGUI_BUILT_INS) $(patsubst %.sh,%,$(SCRIPT_SH)) -GITGUI_VERSION := $(shell git describe) ifndef SHELL_PATH SHELL_PATH = /bin/sh @@ -20,7 +23,7 @@ SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh rm -f $@ $@+ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \ - -e 's/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \ + -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \ $@.sh >$@+ chmod +x $@+ mv $@+ $@ @@ -28,6 +31,9 @@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh $(GITGUI_BUILT_INS): git-gui rm -f $@ && ln git-gui $@ +# These can record GIT_VERSION +$(patsubst %.sh,%,$(SCRIPT_SH)): GIT-VERSION-FILE + all:: $(ALL_PROGRAMS) install: all @@ -36,4 +42,7 @@ install: all $(foreach p,$(GITGUI_BUILT_INS), rm -f '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' && ln '$(DESTDIR_SQ)$(gitexecdir_SQ)/git-gui' '$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' ;) clean:: - rm -f $(ALL_PROGRAMS) + rm -f $(ALL_PROGRAMS) GIT-VERSION-FILE + +.PHONY: all install clean +.PHONY: .FORCE-GIT-VERSION-FILE diff --git a/git-gui.sh b/git-gui.sh index cb2b459ffd..e136e329c3 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA} -set appvers {@@GITGUI_VERSION@@} +set appvers {@@GIT_VERSION@@} set appname [lindex [file split $argv0] end] set gitdir {} @@ -2543,8 +2543,9 @@ $copyright" \ pack $w.desc -side top -fill x -padx 5 -pady 5 set v {} - append v "$appname version $appvers\n\n" - append v "[exec git --version]\n\n" + append v "$appname version $appvers\n" + append v "[exec git version]\n" + append v "\n" if {$tcl_patchLevel eq $tk_patchLevel} { append v "Tcl/Tk version $tcl_patchLevel" } else {