[PATCH 1/1] Add support for an optional .nextmsg file to git-commit-script
From: Jon Seymour <hidden>
Date: 2016-06-15 22:42:00
Subsystem:
the rest · Maintainer:
Linus Torvalds
This change allows a commit message to be prepared prior to git-commit-script being invoked. During git commit the user is then given an opportunity to edit the existing message, if any, and must confirm the commit by deleting a sentinel line from the top of the edit buffer. If the user does not delete the sentinel line, the commit is aborted and the text of the message is saved for future editing. The purpose of this change is to enable undo/redo tools to repopulate a commit message from a previous commit that has been undone and then allow the user to make small edits to the previous commit message prior recommitting the change. If the .nextmsg file does not exist, git-commit-script behaves as before. Signed-off-by: Jon Seymour <redacted> --- git-commit-script | 25 +++++++++++++++++++++++-- 1 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/git-commit-script b/git-commit-script
--- a/git-commit-script
+++ b/git-commit-script@@ -1,5 +1,12 @@ #!/bin/sh +SENTINEL="*** delete this line to confirm the commit ***" : ${GIT_DIR=.git} +:> .editmsg + +if [ -f .nextmsg ] +then + cat .nextmsg >>.editmsg +fi PARENTS="HEAD" if [ -f $GIT_DIR/MERGE_HEAD ]; then echo "#"
@@ -9,17 +16,31 @@ if [ -f $GIT_DIR/MERGE_HEAD ]; then echo "# and try again" echo "#" PARENTS="HEAD -p MERGE_HEAD" -fi > .editmsg +fi >> .editmsg git-status-script >> .editmsg if [ "$?" != "0" ] then cat .editmsg exit 1 fi +if [ -f .nextmsg ] +then + echo "$SENTINEL" >>.editmsg +fi ${VISUAL:-${EDITOR:-vi}} .editmsg -grep -v '^#' < .editmsg | git-stripspace > .cmitmsg +if [ -f .nextmsg ] +then + egrep -v "(^#|\\$SENTINEL)" < .editmsg > .nextmsg + if grep "\\$SENTINEL" < .editmsg >/dev/null + then + :> .editmsg + echo "commit aborted - to confirm, delete the sentinel line in the message" + fi +fi +egrep -v "^#|$SENTINEL" < .editmsg | git-stripspace > .cmitmsg [ -s .cmitmsg ] || exit 1 tree=$(git-write-tree) || exit 1 commit=$(cat .cmitmsg | git-commit-tree $tree -p $PARENTS) || exit 1 echo $commit > $GIT_DIR/HEAD rm -f -- $GIT_DIR/MERGE_HEAD +[ -f .nextmsg ] && rm .nextmsg ------------