aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-01-20 20:31:09 -0500
committerShawn O. Pearce <spearce@spearce.org>2007-01-21 02:54:19 -0500
commitf1cee4e6d19919f6e333f9e671c720003a9a7cec (patch)
treebc74537b8aa7e80aae6e6a9e7a5e4a40398ae97a
parent0499b24ad664d7f6a33d4cfe4a11912ae455b039 (diff)
downloadgit-f1cee4e6d19919f6e333f9e671c720003a9a7cec.tar.gz
git-f1cee4e6d19919f6e333f9e671c720003a9a7cec.tar.xz
git-gui: Ensure version number is always current.
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>
-rw-r--r--.gitignore1
-rwxr-xr-xGIT-VERSION-GEN46
-rw-r--r--Makefile15
-rwxr-xr-xgit-gui.sh7
4 files changed, 63 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore
index 5bda901ae..c714d382e 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 000000000..79f1c527f
--- /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 606bec640..8fade6912 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 cb2b459ff..e136e329c 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 {