Mercurial > hg
annotate contrib/check-commit @ 23172:e955549cd045
tests: write hgrc of more than two lines by using shell heredoc
Here document should be readable than repeating echo commands.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 04 Nov 2014 23:41:46 +0900 |
parents | 15d0390a27fe |
children | ba272156113f |
rev | line source |
---|---|
22043
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 # |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 # Copyright 2014 Matt Mackall <mpm@selenic.com> |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 # |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
5 # A tool/hook to run basic sanity checks on commits/patches for |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
6 # submission to Mercurial. Install by adding the following to your |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 # .hg/hgrc: |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
8 # |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
9 # [hooks] |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
10 # pretxncommit = contrib/check-commit |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
11 # |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
12 # The hook can be temporarily bypassed with: |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
13 # |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
14 # $ BYPASS= hg commit |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
15 # |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
16 # See also: http://mercurial.selenic.com/wiki/ContributingChanges |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
17 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
18 import re, sys, os |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
19 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
20 errors = [ |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
21 (r"[(]bc[)]", "(BC) needs to be uppercase"), |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
22 (r"[(]issue \d\d\d", "no space allowed between issue and number"), |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
23 (r"[(]bug", "use (issueDDDD) instead of bug"), |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
24 (r"^# User [^@\n]+$", "username is not an email address"), |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
25 (r"^# .*\n(?!merge with )[^#]\S+[^:] ", |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
26 "summary line doesn't start with 'topic: '"), |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
27 (r"^# .*\n[A-Z][a-z]\S+", "don't capitalize summary lines"), |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
28 (r"^# .*\n.*\.\s+$", "don't add trailing period on summary line"), |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
29 (r"^# .*\n.{78,}", "summary line too long"), |
22058
15d0390a27fe
check-commit: spot growing whitespace
Matt Mackall <mpm@selenic.com>
parents:
22043
diff
changeset
|
30 (r"^\+\n \n", "adds double empty line"), |
22043
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
31 (r"\+\s+def [a-z]+_[a-z]", "adds a function with foo_bar naming"), |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
32 ] |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
33 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
34 node = os.environ.get("HG_NODE") |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
35 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
36 if node: |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
37 commit = os.popen("hg export %s" % node).read() |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
38 else: |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
39 commit = sys.stdin.read() |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
40 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
41 exitcode = 0 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
42 for exp, msg in errors: |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
43 m = re.search(exp, commit, re.MULTILINE) |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
44 if m: |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
45 pos = 0 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
46 for n, l in enumerate(commit.splitlines(True)): |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
47 pos += len(l) |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
48 if pos >= m.end(): |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
49 print "%d: %s" % (n, msg) |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
50 print " %s" % l[:-1] |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
51 if "BYPASS" not in os.environ: |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
52 exitcode = 1 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
53 break |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
54 |
1274ff3f20a8
contrib: add check-commit hook script to sanity-check commits
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
55 sys.exit(exitcode) |