blob: a7f612f6be7186fe469a43f56bf525aaf6154afe [file] [log] [blame]
#!/bin/sh
# A sample hook to check commit messages created by `git commit`
################################################################
#
# This example script checks commit messages for duplicate `Signed-off-by`
# lines and rejects the commit if these are present.
#
# It is called by "git commit" with a single argument: the name of the file
# that contains the final commit message, which would be used in the commit.
# A a non-zero exit status after issuing an appropriate message stops the operation.
# The hook is allowed to edit the commit message file by rewriting the file
# containing it.
#
# To enable this hook remove the `.sample` suffix from this file entirely.
# Check for duplicate Signed-off-by lines in the commit message.
# The following command uses grep to find lines starting with "Signed-off-by: "
# in the commit message file specified by the first argument `$1`.
# It then sorts the lines, counts the number of occurrences of each line,
# and removes any lines that occur only once.
# If there are any remaining lines, it means there are duplicate Signed-off-by lines.
test "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" = "" || {
echo "Remove duplicate Signed-off-by lines and repeat the commit." 1>&2
exit 1
}