aboutsummaryrefslogtreecommitdiff
path: root/templates/hooks/commit-msg.sample
diff options
context:
space:
mode:
Diffstat (limited to 'templates/hooks/commit-msg.sample')
-rwxr-xr-xtemplates/hooks/commit-msg.sample54
1 files changed, 52 insertions, 2 deletions
diff --git a/templates/hooks/commit-msg.sample b/templates/hooks/commit-msg.sample
index b58d1184a9..f7458efe62 100755
--- a/templates/hooks/commit-msg.sample
+++ b/templates/hooks/commit-msg.sample
@@ -15,10 +15,60 @@
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
-# This example catches duplicate Signed-off-by lines.
+# This example catches duplicate Signed-off-by lines and messages that
+# would confuse 'git am'.
+
+ret=0
test "" = "$(grep '^Signed-off-by: ' "$1" |
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
- exit 1
+ ret=1
}
+
+comment_re="$(
+ {
+ git config --get-regexp "^core\.comment(char|string)\$" ||
+ echo '#'
+ } | sed -n -e '
+ ${
+ s/^[^ ]* //
+ s|[][*./\]|\\&|g
+ s/^auto$/[#;@!$%^&|:]/
+ p
+ }'
+)"
+scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$"
+comment_line="^${comment_re}.*"
+blank_line='^[ ]*$'
+# Disallow lines starting with "diff -" or "Index: " in the body of the
+# message. Stop looking if we see a scissors line.
+line="$(sed -n -e "
+ # Skip comments and blank lines at the start of the file.
+ /${scissors_line}/q
+ /${comment_line}/d
+ /${blank_line}/d
+ # The first paragraph will become the subject header so
+ # does not need to be checked.
+ : subject
+ n
+ /${scissors_line}/q
+ /${blank_line}/!b subject
+ # Check the body of the message for problematic
+ # prefixes.
+ : body
+ n
+ /${scissors_line}/q
+ /${comment_line}/b body
+ /^diff -/{p;q;}
+ /^Index: /{p;q;}
+ b body
+ " "$1")"
+if test -n "$line"
+then
+ echo >&2 "Message contains a diff that will confuse 'git am'."
+ echo >&2 "To fix this indent the diff."
+ ret=1
+fi
+
+exit $ret