#!/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=${CHECKPATCH:-contrib/scripts/checkpatch.pl} CHECKPATCH_OPTS=${CHECKPATCH_OPTS:-"--no-signoff --no-tree"} # 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. # The developer should uncomment it to include it in the commit message. 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, as there may be exceptions and it is better let a person decide. if [ -x "$CHECKPATCH" ]; then echo "" >> "$1" echo "#" >> "$1" [ -d ".git/rebase-apply" -o -d ".git/rebase-merge" ] && DIFFOPT="HEAD" || DIFFOPT="--cached" git diff $DIFFOPT | $CHECKPATCH $CHECKPATCH_OPTS - | sed -e 's/^/# /' >> "$1" fi # Cause Vim to wrap text at 70 columns to match commit message style. # Adding a matching emacs modeline would be good, if I knew how to do that. echo "# vim:textwidth=70:" >> "$1" # Add these comments at the end # So that Vim does not pretend # The "echo" above is actually # A modeline for this file. Savvy?