From 871f4c97ad7e021d1a0a98c80c5da77fcf70e4af Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Sun, 18 Feb 2007 21:06:48 -0500 Subject: [PATCH] git-gui: Display all authors of git-gui. 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 --- .gitignore | 1 + CREDITS-GEN | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 23 +++++++++++-------- git-gui.sh | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 136 insertions(+), 10 deletions(-) create mode 100755 CREDITS-GEN diff --git a/.gitignore b/.gitignore index c714d382e..805ca2e1c 100644 --- a/.gitignore +++ b/.gitignore @@ -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 index 000000000..da2c07629 --- /dev/null +++ b/CREDITS-GEN @@ -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 diff --git a/Makefile b/Makefile index fd82d9d16..66538ba1a 100644 --- 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 diff --git a/git-gui.sh b/git-gui.sh index 63848dc70..cd3afedc0 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -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 "grab $w; focus $w" + bind $w [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 -- 2.26.2