contrib: Make prepare-commit-msg hook smarter for amends

With this change the prepare-commit-msg hook can compare the log of a
commit being amended with the staged changes, and not run mklog.py
unnecessarily. This is controlled by a git config option,
gcc-config.mklog-hook-type.

contrib/ChangeLog:

	* prepare-commit-msg: Use the gcc-config.mklog-hook-type Git
	config key instead of the GCC_FORCE_MKLOG environment variable.
	Optionally disable generating a new ChangeLog template for
	amended commits when the existing log is still OK.
This commit is contained in:
Jonathan Wakely 2020-06-11 20:22:17 +01:00
parent 393ccb7256
commit df665e568d
1 changed files with 13 additions and 0 deletions

View File

@ -49,6 +49,19 @@ elif [ $COMMIT_SOURCE = commit ]; then
# otherwise, assume a new commit with -C.
if [ $SHA1 = HEAD ]; then
cmd="diff --cached HEAD^"
if [ "$(git config gcc-config.mklog-hook-type)" = "smart-amend" ]; then
# Check if the existing message still describes the staged changes.
f=$(mktemp /tmp/git-commit.XXXXXX) || exit 1
git log -1 --pretty=email HEAD > $f
printf '\n---\n\n' >> $f
git $cmd >> $f
if contrib/gcc-changelog/git_email.py "$f" >/dev/null 2>&1; then
# Existing commit message is still OK for amended commit.
rm $f
exit 0
fi
rm $f
fi
else
cmd="diff --cached"
fi