1+ #! /bin/sh
2+ #
3+ # An example hook script to check the commit log message.
4+ # Called by "git commit" with one argument, the name of the file
5+ # that has the commit message. The hook should exit with non-zero
6+ # status after issuing an appropriate message if it wants to stop the
7+ # commit. The hook is allowed to edit the commit message file.
8+ #
9+ # To enable this hook, rename this file to "commit-msg".
10+
11+ # Uncomment the below to add a Signed-off-by line to the message.
12+ # Doing this in a hook is a bad idea in general, but the prepare-commit-msg
13+ # hook is more suited to it.
14+ #
15+ # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
16+ # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
17+
18+ # This example catches duplicate Signed-off-by lines.
19+
20+ test " " = " $( grep ' ^Signed-off-by: ' " $1 " |
21+ sort | uniq -c | sed -e ' /^[ ]*1[ ]/d' ) " || {
22+ echo >&2 Duplicate Signed-off-by lines.
23+ exit 1
24+ }
25+ if ! head -1 " $1 " | grep -qE " ^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test|merge)(\(.+?\))?(\!)?: .{3,}$" ; then
26+ echo " Aborting commit. Your commit message is invalid. See some examples below:" >&2
27+ echo " feat(logging): added logs for failed signups" >&2
28+ echo " fix(homepage): fixed image gallery" >&2
29+ echo " test(homepage): updated tests" >&2
30+ echo " docs(readme): added new logging table information" >&2
31+ echo " For more information check https://www.conventionalcommits.org/en/v1.0.0/ for more details" >&2
32+ exit 1
33+ fi
34+ if ! head -1 " $1 " | grep -qE " ^.{9,85}$" ; then
35+ echo " Aborting commit. Your commit message is too long. Max length is 89 characters" >&2
36+ exit 1
37+ fi
0 commit comments