#!/bin/sh

# Copyright (C) 2020-2023 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 [ -n "$DIFF_FILE" ]; then
    tee="tee $DIFF_FILE"
else
    tee="cat"
fi

git $cmd | $tee | git gcc-mklog -c "$COMMIT_MSG_FILE"
