##// END OF EJS Templates
check-commit: make foo_bar naming regexp less greedy...
check-commit: make foo_bar naming regexp less greedy \s is equivalent to the character class [ \t\n\r\f\v]. Using \s+ in a regular expression against input with multiple lines may match across multiple lines. For the regexp in question, "\+\s+" would match "+\n " and similar sequences, leading to false positives for functions that were included in diff context, after a modified hunk.

File last commit:

r25379:894bcdbb default
r25379:894bcdbb default
Show More
check-commit
56 lines | 1.7 KiB | text/plain | TextLexer
Matt Mackall
contrib: add check-commit hook script to sanity-check commits
r22043 #!/usr/bin/env python
#
# Copyright 2014 Matt Mackall <mpm@selenic.com>
#
# A tool/hook to run basic sanity checks on commits/patches for
# submission to Mercurial. Install by adding the following to your
# .hg/hgrc:
#
# [hooks]
# pretxncommit = contrib/check-commit
#
# The hook can be temporarily bypassed with:
#
# $ BYPASS= hg commit
#
# See also: http://mercurial.selenic.com/wiki/ContributingChanges
import re, sys, os
errors = [
(r"[(]bc[)]", "(BC) needs to be uppercase"),
(r"[(]issue \d\d\d", "no space allowed between issue and number"),
Pierre-Yves David
check-commit: be more picky about detection of wrong bug tag...
r24703 (r"[(]bug(\d|\s)", "use (issueDDDD) instead of bug"),
Matt Mackall
contrib: add check-commit hook script to sanity-check commits
r22043 (r"^# User [^@\n]+$", "username is not an email address"),
(r"^# .*\n(?!merge with )[^#]\S+[^:] ",
"summary line doesn't start with 'topic: '"),
(r"^# .*\n[A-Z][a-z]\S+", "don't capitalize summary lines"),
Eric Sumner
check-commit: check capitalization in summary lines...
r24049 (r"^# .*\n[^\n]*: *[A-Z][a-z]\S+", "don't capitalize summary lines"),
Matt Mackall
contrib: add check-commit hook script to sanity-check commits
r22043 (r"^# .*\n.*\.\s+$", "don't add trailing period on summary line"),
Augie Fackler
check-commit: print limit when user has a too-long summary
r25137 (r"^# .*\n.{78,}", "summary line too long (limit is 78)"),
Matt Mackall
check-commit: spot growing whitespace...
r22058 (r"^\+\n \n", "adds double empty line"),
Gregory Szorc
check-commit: make foo_bar naming regexp less greedy...
r25379 (r"^\+[ \t]+def [a-z]+_[a-z]", "adds a function with foo_bar naming"),
Matt Mackall
contrib: add check-commit hook script to sanity-check commits
r22043 ]
node = os.environ.get("HG_NODE")
if node:
commit = os.popen("hg export %s" % node).read()
else:
commit = sys.stdin.read()
exitcode = 0
for exp, msg in errors:
m = re.search(exp, commit, re.MULTILINE)
if m:
pos = 0
for n, l in enumerate(commit.splitlines(True)):
pos += len(l)
if pos >= m.end():
print "%d: %s" % (n, msg)
print " %s" % l[:-1]
if "BYPASS" not in os.environ:
exitcode = 1
break
sys.exit(exitcode)