DORMANTno replies

[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
------------
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help