#!/bin/sh # Copyright (C) 2020 Free Software Foundation, Inc. # # This file is part of GCC. # # GCC is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # GCC is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GCC; see the file COPYING. If not, write to # the Free Software Foundation, 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. COMMIT_MSG_FILE=$1 COMMIT_SOURCE=$2 SHA1=$3 # We might be on a branch before the file was added. if ! [ -x contrib/mklog.py ]; then exit 0; fi # Can't do anything if $COMMIT_MSG_FILE isn't a file. if ! [ -f "$COMMIT_MSG_FILE" ]; then exit 0; fi # Don't do anything unless requested to. if [ -z "$GCC_FORCE_MKLOG" ]; then exit 0; fi if [ -z "$COMMIT_SOURCE" ] || [ $COMMIT_SOURCE = template ]; then # No source or "template" means new commit. cmd="diff --cached" elif [ $COMMIT_SOURCE = message ]; then # "message" means -m; assume a new commit if there are any changes staged. if ! git diff --cached --quiet; then cmd="diff --cached" else cmd="diff --cached HEAD^" fi elif [ $COMMIT_SOURCE = commit ]; then # The message of an existing commit. If it's HEAD, assume --amend; # 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 else # Do nothing for merge or squash. exit 0 fi # Save diff to a file if requested. DIFF_FILE=$(git config gcc-config.diff-file) if ! [ -z "$DIFF_FILE" ]; then tee="tee $DIFF_FILE" else tee="cat" fi git $cmd | $tee | git gcc-mklog $GCC_MKLOG_ARGS -c "$COMMIT_MSG_FILE"