This patch introduces a prepare-commit-msg hook that appends a ChangeLog skeleton to a commit message that doesn't already have one, and a 'git amend-mklog' command to amend and append a new ChangeLog skeleton (to be edited together with existing entries by hand).
Thoughts? contrib/ChangeLog: * prepare-commit-msg: New file. * gcc-git-customization.sh: Install it. Add amend-mklog alias. --- contrib/gcc-git-customization.sh | 5 ++++ contrib/prepare-commit-msg | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 contrib/prepare-commit-msg diff --git a/contrib/gcc-git-customization.sh b/contrib/gcc-git-customization.sh index 7a950ae5f38..a36403f0b2c 100755 --- a/contrib/gcc-git-customization.sh +++ b/contrib/gcc-git-customization.sh @@ -30,6 +30,11 @@ git config alias.gcc-backport '!f() { rev=$1; git cherry-pick -x $@; } ; f' git config alias.gcc-mklog '!f() { "`git rev-parse --show-toplevel`/contrib/mklog.py" $@; } ; f' +hookdir=`git rev-parse --git-path hooks` +install "`git rev-parse --show-toplevel`/contrib/prepare-commit-msg" "$hookdir" + +git config alias.amend-mklog '!f() { GCC_PREPARE_COMMIT_FORCE_APPEND=1 git commit --amend "$@"; }; f' + # Make diff on MD files use "(define" as a function marker. # Use this in conjunction with a .gitattributes file containing # *.md diff=md diff --git a/contrib/prepare-commit-msg b/contrib/prepare-commit-msg new file mode 100644 index 00000000000..61bc051268f --- /dev/null +++ b/contrib/prepare-commit-msg @@ -0,0 +1,39 @@ +#!/bin/sh + +#COMMIT_MSG_FILE=$1 +#COMMIT_SOURCE=$2 +#SHA1=$3 + +#echo "# $*" > $HOME/prepare-commit-msg-args + +# Can't do anything if $1 isn't a file. +if ! [ -f "$1" ]; then exit 0; fi + +# Don't mess with existing entries unless requested to. +if [ -z "$GCC_PREPARE_COMMIT_FORCE_APPEND" ] && + grep -qsF 'ChangeLog:' "$1" +then exit 0; fi + +if [ -z "$2" ] || [ $2 == template ]; then + # No source or "template" means new commit. + cmd="diff --cached" +elif [ $2 == message ]; then + # "message" means -m, but could be either a new commit or --amend. + # Guess which based on whether there are any changes staged. + if git diff --cached --quiet; then + cmd="show" + else + cmd="diff --cached" + fi + + # Add a blank line before the ChangeLog entries. + echo >> "$1" +elif [ $2 == commit ]; then + # The message of an existing commit. + cmd="show $3" +else + # Do nothing for merge or squash. + exit 0 +fi + +git $cmd | git gcc-mklog >> "$1" base-commit: 584d52b088f9fcf78704b504c3f1f07e17c1cded -- 2.18.1