#!/bin/bash
#
# A Git hook script to prepare the commit log message.  Install into
# lustre/.git/hooks/prepare-commit-msg to enable for Lustre commits.
#
# Called by git-commit with the name of the file that has the
# commit message, followed by the description of the commit
# message's source.  The hook's purpose is to edit the commit
# message file.  If the hook fails with a non-zero status,
# the commit is aborted.
#
# Commit hook to check the patch against the Lustre coding style.
# It adds any checkpatch warnings/errors as commit comments, which
# means that they can currently be ignored, but are at least visible.

CHECKPATCH=build/checkpatch.pl
CHECKPATCH_OPTS="--no-signoff --no-tree --no-tabs"
[ -r "$CHECKPATCH" ] || exit 0

# If there are no comments in the commit, it is likely a rebase and
# this shouldn't be adding new comments, or they appear in the commit.
grep -q "^#" "$1" || exit 0

# Add a commented-out Signed-off-by: line.  This shouldn't be added in an
# uncommented form, otherwise sanity checking for an emtpy commit fails.
SIGNOFF=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
grep -qs "^$SIGNOFF" "$1" || echo "# $SIGNOFF" >> "$1"

# Add the checkpatch.pl output as comments, but don't cause a commit error
# yet, until there is more certainty that it is working correctly.
echo "" >> "$1"
echo "#" >> "$1"
git diff --cached | $CHECKPATCH $CHECKPATCH_OPTS - | sed -e 's/^/# /' >> "$1"
