Whamcloud - gitweb
LU-1199 build: Clean out the build directory
[fs/lustre-release.git] / contrib / git-hooks / prepare-commit-msg
diff --git a/contrib/git-hooks/prepare-commit-msg b/contrib/git-hooks/prepare-commit-msg
new file mode 100755 (executable)
index 0000000..9acb19e
--- /dev/null
@@ -0,0 +1,34 @@
+#!/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=contrib/scripts/checkpatch.pl
+CHECKPATCH_OPTS="--no-signoff --no-tree"
+[ -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"
+echo "# vim:textwidth=70:" >> "$1"