Browse Source

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>
maint
Shawn O. Pearce 18 years ago
parent
commit
f1cee4e6d1
  1. 1
      .gitignore
  2. 46
      GIT-VERSION-GEN
  3. 15
      Makefile
  4. 7
      git-gui.sh

1
.gitignore vendored

@ -1,2 +1,3 @@ @@ -1,2 +1,3 @@
GIT-VERSION-FILE
git-citool
git-gui

46
GIT-VERSION-GEN

@ -0,0 +1,46 @@ @@ -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
}


15
Makefile

@ -1,9 +1,12 @@ @@ -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)) @@ -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 @@ -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 @@ -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

7
git-gui.sh

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License @@ -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" \ @@ -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 {

Loading…
Cancel
Save