From: Ted Pavlic <ted@tedpavlic.com>
To: gitster@pobox.com
Cc: git@vger.kernel.org, Ted Pavlic <ted@tedpavlic.com>
Subject: [PATCH] contrib: A script to show diff in new window while editing commit message.
Date: Wed, 21 Jan 2009 17:45:06 -0500 [thread overview]
Message-ID: <1232577906-868-1-git-send-email-ted@tedpavlic.com> (raw)
In-Reply-To: <4977A2C9.1070502@tedpavlic.com>
This new script (contrib/giteditor/giteditor) is an example GIT_EDITOR
that causes the editor to open the commit message as well as a "git diff
--cached" in a separate window. This behavior differs from "git commit
-v" in that the diff can be browsed independently of the commit message
without having to invoke a split window view in an editor.
This script also detects when "stg edit" is being called and uses "stg
show" instead. Hence, it implements a kind of "stg show -v".
This script is highly influenced by the "hgeditor" script distributed
with the Mercurial SCM.
It could be improved by supporting a command-line flag that would mimic
the "git commit -v"-type behavior of opening the diff in the same window
as the commit message. This would extend existing commands like "stg
edit" that do not already have a "-v"-type option.
Signed-off-by: Ted Pavlic <ted@tedpavlic.com>
---
This version attempts to answer the concerns brought up by Johannes
Schindlin.
contrib/giteditor/giteditor | 68 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 68 insertions(+), 0 deletions(-)
create mode 100755 contrib/giteditor/giteditor
diff --git a/contrib/giteditor/giteditor b/contrib/giteditor/giteditor
new file mode 100755
index 0000000..501a11c
--- /dev/null
+++ b/contrib/giteditor/giteditor
@@ -0,0 +1,68 @@
+#!/bin/sh
+#
+# Set GIT_EDITOR (or core.editor) to this script to see a diff alongside
+# commit message. This script differs from "git commit -v" in that the
+# diff shows up in a separate buffer. Additionally, this script works
+# with "stg edit" as well.
+#
+# Copyright (c) 2009 by Theodore P. Pavlic <ted@tedpavlic.com>
+# Highly influenced by hgeditor script distributed with Mercurial SCM.
+# Distributed under the GNU General Public License, version 2.0.
+
+# Find git
+test -z "${GIT}" && GIT="git"
+
+# Find stg
+test -z "${STG}" && STG="stg"
+
+# Use an editor. To prevent loops, avoid GIT_EDITOR and core.editor.
+EDITOR=${GIT_EDITOR_EDITOR-${VISUAL-${EDITOR-vi}}}
+
+# If we recognize a popular editor, add necessary flags (e.g., to
+# prevent forking)
+case "${EDITOR}" in
+ emacs)
+ EDITOR="${EDITOR} -nw"
+ ;;
+ mvim|gvim|vim|vi)
+ EDITOR="${EDITOR} -f -o"
+ ;;
+esac
+
+# Remove temporary files even if we get interrupted
+DIFFOUTPUT="giteditor.${RANDOM}.${RANDOM}.${RANDOM}.$$.diff"
+cleanup_exit() {
+ rm -f "${DIFFOUTPUT}"
+}
+trap "cleanup_exit" 0 # normal exit
+trap "exit 255" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
+
+# For git, COMMITMSG=COMMIT_EDITMSG
+# For stg, COMMITMSG=.stgit-edit.txt
+# etc.
+COMMITMSG=$(basename "$1")
+case "${COMMITMSG}" in
+ .stgit-edit.txt) # From "stg edit"
+ DIFFCMD="${STG}"
+ DIFFARGS="show"
+ ;;
+ *) # Fall through to "git commit" case
+ DIFFCMD="${GIT}"
+ DIFFARGS="diff --cached"
+ # To focus on files that changed, use:
+ #DIFFARGS="diff --cached --diff-filter=M"
+ ;;
+esac
+
+"${DIFFCMD}" ${DIFFARGS} > ${DIFFOUTPUT}
+
+if test -s "${DIFFOUTPUT}"; then
+ # Diff is non-empty, so edit msg and diff
+ ${EDITOR} "$1" "${DIFFOUTPUT}" || exit $?
+else
+ # Empty diff. Only edit msg
+ ${EDITOR} "$1" || exit $?
+fi
+
+# (recall that DIFFOUTPUT file gets cleaned up by trap above)
+exit
--
1.6.1.213.g28da8
next prev parent reply other threads:[~2009-01-21 22:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-21 20:47 [PATCH] Added giteditor script to show diff while editing commit message ted
[not found] ` <0E82F261-2D96-4204-9906-C5E8D47E9A5D@wincent.com>
2009-01-21 21:07 ` Ted Pavlic
2009-01-21 21:46 ` Johannes Schindelin
2009-01-21 22:33 ` Ted Pavlic
2009-01-21 22:45 ` Ted Pavlic [this message]
2009-01-21 23:59 ` [PATCH] contrib: A script to show diff in new window " Junio C Hamano
2009-01-22 3:39 ` Ted Pavlic
2009-01-22 3:50 ` Ted Pavlic
2009-01-22 7:49 ` Junio C Hamano
2009-01-21 22:52 ` [PATCH] Added giteditor script to show diff " Johannes Schindelin
2009-01-22 1:46 ` Ted Pavlic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1232577906-868-1-git-send-email-ted@tedpavlic.com \
--to=ted@tedpavlic.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).