summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0499b24)
raw | patch | inline | side by side (parent: 0499b24)
author | Shawn O. Pearce <spearce@spearce.org> | |
Sun, 21 Jan 2007 01:31:09 +0000 (20:31 -0500) | ||
committer | Shawn O. Pearce <spearce@spearce.org> | |
Sun, 21 Jan 2007 07:54:19 +0000 (02:54 -0500) |
I'm stealing the exact logic used by core Git within its own Makefile to
setup the version number within scripts and executables. This way we
can be sure that the version number is always updated after a commit,
and that the version number also reflects when it is coming from a dirty
working directory (and is thus pretty worthless).
I've cleaned up some of the version display code in the about dialog too.
There were simply too many blank lines in the bottom section where we
showed the version data.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
setup the version number within scripts and executables. This way we
can be sure that the version number is always updated after a commit,
and that the version number also reflects when it is coming from a dirty
working directory (and is thus pretty worthless).
I've cleaned up some of the version display code in the about dialog too.
There were simply too many blank lines in the bottom section where we
showed the version data.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
.gitignore | patch | blob | history | |
GIT-VERSION-GEN | [new file with mode: 0755] | patch | blob |
Makefile | patch | blob | history | |
git-gui.sh | patch | blob | history |
diff --git a/.gitignore b/.gitignore
index 5bda901aebe3ce8a2da7c9b0fb4cc2b04b941a61..c714d382e87b5c18609f5934890c8b135a720262 100644 (file)
--- a/.gitignore
+++ b/.gitignore
+GIT-VERSION-FILE
git-citool
git-gui
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
--- /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 606bec640ee4d8b425d6ef9c8b2313a2e9435f84..8fade69127611ba9a6e38bed65b861379ac7dcce 100644 (file)
--- a/Makefile
+++ b/Makefile
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
$(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 $@+ $@
$(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
$(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 cb2b459ffd8a4569675e99ede0ce9e6652037320..e136e329c3360d80413f6cd882300c95744f727d 100755 (executable)
--- a/git-gui.sh
+++ b/git-gui.sh
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 {}
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 {