aboutsummaryrefslogtreecommitdiff
path: root/contrib/prepare-commit-msg
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-06-11 20:22:17 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-06-11 20:22:33 +0100
commitdf665e568dcba2fe0b14a6cf0888cc78b4ebbf44 (patch)
tree873579b5c1571eb8a422df4cef1f7bdae278d4b0 /contrib/prepare-commit-msg
parent393ccb72566dc004b9ab5c3b8fb6fdca6c095812 (diff)
downloadgcc-df665e568dcba2fe0b14a6cf0888cc78b4ebbf44.zip
gcc-df665e568dcba2fe0b14a6cf0888cc78b4ebbf44.tar.gz
gcc-df665e568dcba2fe0b14a6cf0888cc78b4ebbf44.tar.bz2
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.
Diffstat (limited to 'contrib/prepare-commit-msg')
-rwxr-xr-xcontrib/prepare-commit-msg13
1 files changed, 13 insertions, 0 deletions
diff --git a/contrib/prepare-commit-msg b/contrib/prepare-commit-msg
index cc9ba2e..969847d 100755
--- a/contrib/prepare-commit-msg
+++ b/contrib/prepare-commit-msg
@@ -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