git-gui: Display all authors of git-gui.
authorShawn O. Pearce <spearce@spearce.org>
Mon, 19 Feb 2007 02:06:48 +0000 (21:06 -0500)
committerShawn O. Pearce <spearce@spearce.org>
Wed, 21 Feb 2007 05:11:01 +0000 (00:11 -0500)
Now that git-gui has been released to the public as part of Git 1.5.0
I am starting to see some work from other people beyond myself and
Paul.  Consequently the copyright for git-gui is not strictly the
two of us anymore, and these others deserve to have some credit
given to them.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
.gitignore
CREDITS-GEN [new file with mode: 0755]
Makefile
git-gui.sh

index c714d382e87b5c18609f5934890c8b135a720262..805ca2e1c7875fcc9c588dbee5041929c0e451d3 100644 (file)
@@ -1,3 +1,4 @@
+CREDITS-FILE
 GIT-VERSION-FILE
 git-citool
 git-gui
diff --git a/CREDITS-GEN b/CREDITS-GEN
new file mode 100755 (executable)
index 0000000..da2c076
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+CF=CREDITS-FILE
+tip=
+
+tree_search ()
+{
+       head=$1
+       tree=$2
+       for p in $(git rev-list --parents --max-count=1 $head 2>/dev/null)
+       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 $p; break;;
+               esac
+       done
+}
+
+generate_credits ()
+{
+       tip=$1 &&
+       rm -f $CF &&
+       git shortlog -n -s $tip | sed 's/: .*$//' >$CF || exit
+}
+
+# Always use the tarball credits file if found, just
+# in case we are somehow contained in a larger git
+# repository that doesn't actually track our state.
+# (At least one package manager is doing this.)
+#
+# 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 test -f credits
+then
+       rm -f $CF &&
+       cp credits $CF || exit
+elif 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) &&
+   tip=$(tree_search $head $tree) &&
+   test -n "$tip"
+then
+       generate_credits $tip || exit
+elif tip="$(git rev-parse --verify HEAD 2>/dev/null)" &&
+   test -n "$tip"
+then
+       generate_credits $tip || exit
+else
+       echo "error: Cannot locate authorship information." >&2
+       exit 1
+fi
index fd82d9d16dd17d1030c4414f6a30af56ed4deaa1..66538ba1adb9d50b80288f9ae3c0df77758059aa 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,9 +4,8 @@ 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))
+ALL_PROGRAMS = git-gui $(GITGUI_BUILT_INS)
 
 ifndef SHELL_PATH
        SHELL_PATH = /bin/sh
@@ -24,20 +23,24 @@ DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
 gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
 SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
 
-$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
+git-gui: git-gui.sh GIT-VERSION-FILE CREDITS-FILE
        rm -f $@ $@+
-       sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
+       sed -n \
+               -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
                -e 's/@@GITGUI_VERSION@@/$(GITGUI_VERSION)/g' \
+               -e '1,/^set gitgui_credits /p' \
                $@.sh >$@+
+       cat CREDITS-FILE >>$@+
+       sed -e '1,/^set gitgui_credits /d' $@.sh >>$@+
        chmod +x $@+
        mv $@+ $@
 
+CREDITS-FILE: CREDITS-GEN .FORCE-CREDITS-FILE
+       $(SHELL_PATH) ./CREDITS-GEN
+
 $(GITGUI_BUILT_INS): git-gui
        rm -f $@ && ln git-gui $@
 
-# These can record GITGUI_VERSION
-$(patsubst %.sh,%,$(SCRIPT_SH)): GIT-VERSION-FILE
-
 all:: $(ALL_PROGRAMS)
 
 install: all
@@ -45,12 +48,14 @@ 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:
+dist-version: CREDITS-FILE
        @mkdir -p $(TARDIR)
        @echo $(GITGUI_VERSION) > $(TARDIR)/version
+       @cat CREDITS-FILE > $(TARDIR)/credits
 
 clean::
-       rm -f $(ALL_PROGRAMS) GIT-VERSION-FILE
+       rm -f $(ALL_PROGRAMS) GIT-VERSION-FILE CREDITS-FILE
 
 .PHONY: all install dist-version clean
 .PHONY: .FORCE-GIT-VERSION-FILE
+.PHONY: .FORCE-CREDITS-FILE
index 63848dc705f969182dccd70f9ea287034d4902d0..cd3afedc023eea75b5589cd972326416bcfb9185 100755 (executable)
@@ -4,7 +4,7 @@ exec wish "$0" -- "$@"
 
 set appvers {@@GITGUI_VERSION@@}
 set copyright {
-Copyright © 2006, 2007 Shawn Pearce, Paul Mackerras.
+Copyright © 2006, 2007 Shawn Pearce, et. al.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -19,6 +19,9 @@ GNU General Public License for more details.
 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 gitgui_credits {
+Paul Mackerras
+}
 
 ######################################################################
 ##
@@ -4477,6 +4480,61 @@ proc do_commit {} {
        commit_tree
 }
 
+proc do_credits {} {
+       global gitgui_credits
+
+       set w .credits_dialog
+
+       toplevel $w
+       wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
+
+       label $w.header -text {git-gui Contributors} -font font_uibold
+       pack $w.header -side top -fill x
+
+       frame $w.buttons
+       button $w.buttons.close -text {Close} \
+               -font font_ui \
+               -command [list destroy $w]
+       pack $w.buttons.close -side right
+       pack $w.buttons -side bottom -fill x -pady 10 -padx 10
+
+       frame $w.credits
+       text $w.credits.t \
+               -background [$w.header cget -background] \
+               -yscrollcommand [list $w.credits.sby set] \
+               -width 20 \
+               -height 10 \
+               -wrap none \
+               -borderwidth 1 \
+               -relief solid \
+               -padx 5 -pady 5 \
+               -font font_ui
+       scrollbar $w.credits.sby -command [list $w.credits.t yview]
+       pack $w.credits.sby -side right -fill y
+       pack $w.credits.t -fill both -expand 1
+       pack $w.credits -side top -fill both -expand 1 -padx 5 -pady 5
+
+       label $w.desc \
+               -text "All portions are copyrighted by their respective authors
+and are distributed under the GNU General Public License." \
+               -padx 5 -pady 5 \
+               -justify left \
+               -anchor w \
+               -borderwidth 1 \
+               -relief solid \
+               -font font_ui
+       pack $w.desc -side top -fill x -padx 5 -pady 5
+
+       $w.credits.t insert end "[string trim $gitgui_credits]\n"
+       $w.credits.t conf -state disabled
+       $w.credits.t see 1.0
+
+       bind $w <Visibility> "grab $w; focus $w"
+       bind $w <Key-Escape> [list destroy $w]
+       wm title $w [$w.header cget -text]
+       tkwait window $w
+}
+
 proc do_about {} {
        global appvers copyright
        global tcl_patchLevel tk_patchLevel
@@ -4493,6 +4551,10 @@ proc do_about {} {
        button $w.buttons.close -text {Close} \
                -font font_ui \
                -command [list destroy $w]
+       button $w.buttons.credits -text {Contributors} \
+               -font font_ui \
+               -command do_credits
+       pack $w.buttons.credits -side left
        pack $w.buttons.close -side right
        pack $w.buttons -side bottom -fill x -pady 10 -padx 10