annotate check_whitespace.py @ 11:ff07accd0692

Don't use print; complain when used as program instead of python hook.
author Sjoerd Mullender <sjoerd@acm.org>
date Fri, 20 Mar 2015 15:26:10 +0100 (2015-03-20)
parents bd1ca3d502d6
children 915cf73f6afa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1 #!/usr/bin/env python
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2 #
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3 # Mercurial hook to check for inappropriate whitespace. Currently it
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
4 # only checks Python files.
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
5 #
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
6 # This script is based on the code in the Mercurial book
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
7 # <http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html#id403945>
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
8
3
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
9 '''hook to refuse commits that introduce some bad inputs.
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
10 Inputs that are refused are conflict markers (rows of < or >
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
11 characters), and tabs and trailing white space in Python sources.
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
12
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
13 Usage: in your ~/.hgrc file add:
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
14 [hooks]
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
15 pretxncommit.whitespace = python:/path/to/check_whitespace.py:hook
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
16 pretxnchangegroup.whitespace = python:/path/to/check_whitespace.py:hook
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
17 '''
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
18
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
19 import re
9
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
20 import os
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
21
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
22 binary_suffixes = (
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
23 '.bam',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
24 '.bmp',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
25 '.bz2',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
26 '.chm',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
27 '.cpl',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
28 '.dia',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
29 '.dll',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
30 '.gz',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
31 '.ico',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
32 '.pdf',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
33 '.png',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
34 '.rtf',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
35 '.zip',
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
36 )
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
37
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
38 def trailing_whitespace(difflines):
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
39 linenum = 0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
40 header = False
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
41 filename = ''
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
42 fnre = re.compile(r'(?:---|\+\+\+) (?P<filename>[^\t\r\n]+)')
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
43 lnre = re.compile(r'@@ -\d+,\d+ \+(?P<lineno>\d+),')
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
44 wsre = re.compile(r'\+.*[ \t]$')
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
45 tbre = re.compile(r'\+.*\t')
2
adc4e99b4a4a Added test for conflict markers.
Sjoerd Mullender <sjoerd@acm.org>
parents: 0
diff changeset
46 resre = re.compile(r'\+(<<<<<<<|>>>>>>>)')
6
95e8189b5fb4 Check for newline at end of file.
Sjoerd Mullender <sjoerd@acm.org>
parents: 5
diff changeset
47 adding = False
7
2ac85cc1e11b Symlinks may have no newline at the end.
Sjoerd Mullender <sjoerd@acm.org>
parents: 6
diff changeset
48 islink = False # symlinks can have no newline at end
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
49
5
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
50 for chunk in difflines:
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
51 for line in chunk.split('\n'):
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
52 if header:
7
2ac85cc1e11b Symlinks may have no newline at the end.
Sjoerd Mullender <sjoerd@acm.org>
parents: 6
diff changeset
53 if line.startswith('new file mode'):
2ac85cc1e11b Symlinks may have no newline at the end.
Sjoerd Mullender <sjoerd@acm.org>
parents: 6
diff changeset
54 islink = '120000' in line
5
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
55 # remember the name of the file that this diff affects
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
56 m = fnre.match(line)
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
57 if m is not None and m.group('filename') != '/dev/null':
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
58 filename = m.group('filename').split('/', 1)[-1]
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
59 if line.startswith('+++ '):
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
60 header = False
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
61 continue
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
62 if line.startswith('diff '):
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
63 header = True
6
95e8189b5fb4 Check for newline at end of file.
Sjoerd Mullender <sjoerd@acm.org>
parents: 5
diff changeset
64 adding = False
7
2ac85cc1e11b Symlinks may have no newline at the end.
Sjoerd Mullender <sjoerd@acm.org>
parents: 6
diff changeset
65 islink = False
5
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
66 continue
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
67 # hunk header - save the line number
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
68 m = lnre.match(line)
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
69 if m is not None:
5
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
70 linenum = int(m.group('lineno'))
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
71 continue
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
72 if header or not filename:
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
73 continue
6
95e8189b5fb4 Check for newline at end of file.
Sjoerd Mullender <sjoerd@acm.org>
parents: 5
diff changeset
74 if line[:1] == '+':
95e8189b5fb4 Check for newline at end of file.
Sjoerd Mullender <sjoerd@acm.org>
parents: 5
diff changeset
75 adding = True
95e8189b5fb4 Check for newline at end of file.
Sjoerd Mullender <sjoerd@acm.org>
parents: 5
diff changeset
76 elif line[:1] in (' ', '-'):
95e8189b5fb4 Check for newline at end of file.
Sjoerd Mullender <sjoerd@acm.org>
parents: 5
diff changeset
77 adding = False
8
42b21d1a4e84 Accept no newline at end of file for vertoo.data.
Sjoerd Mullender <sjoerd@acm.org>
parents: 7
diff changeset
78 elif adding \
42b21d1a4e84 Accept no newline at end of file for vertoo.data.
Sjoerd Mullender <sjoerd@acm.org>
parents: 7
diff changeset
79 and not islink \
42b21d1a4e84 Accept no newline at end of file for vertoo.data.
Sjoerd Mullender <sjoerd@acm.org>
parents: 7
diff changeset
80 and line.startswith(r'\ No newline at end of file') \
9
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
81 and not filename.endswith('vertoo.data') \
1ba95b6130d4 Allow binary files to not end in newline.
Sjoerd Mullender <sjoerd@acm.org>
parents: 8
diff changeset
82 and not os.path.splitext(filename)[1] in binary_suffixes:
6
95e8189b5fb4 Check for newline at end of file.
Sjoerd Mullender <sjoerd@acm.org>
parents: 5
diff changeset
83 adding = False
95e8189b5fb4 Check for newline at end of file.
Sjoerd Mullender <sjoerd@acm.org>
parents: 5
diff changeset
84 yield filename, linenum, 'no newline at end of file'
5
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
85 # hunk body - check for an added line with bad whitespace
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
86 if filename[-3:] == '.py' or filename[-5:] == '.py.in':
5
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
87 m = tbre.match(line)
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
88 if m is not None:
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
89 yield filename, linenum, 'TABs'
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
90 # trailing whitespace, for now only in Python source
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
91 m = wsre.match(line)
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
92 if m is not None:
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
93 if filename[-3:] == '.py' or filename[-5:] == '.py.in':
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
94 yield filename, linenum, 'trailing whitespace'
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
95 # conflict markers
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
96 m = resre.match(line)
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
97 if m is not None:
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
98 yield filename, linenum, 'conflict marker'
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
99 if line and line[0] in ' +':
32c51a111990 Fix checking for errors in merge changeset.
Sjoerd Mullender <sjoerd@acm.org>
parents: 4
diff changeset
100 linenum += 1
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
101
10
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
102 def hook(ui, repo, hooktype, node=None, source=None, **kwargs):
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
103 import os, sys, subprocess
10
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
104 if hooktype not in ['pretxnchangegroup', 'pretxncommit']:
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
105 ui.write('Hook should be pretxncommit/pretxnchangegroup not "%s".' % hooktype)
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
106 return 1
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
107 added = False
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
108 branches = {}
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
109 for rev in xrange(repo[node], len(repo)):
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
110 branch = repo[rev].branch()
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
111 if not branches.has_key(branch):
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
112 # first time we see this branch, remember parents to diff against
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
113 branches[branch] = repo[rev].parents()
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
114 desc = 0
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
115 for d in repo[rev].descendants():
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
116 break
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
117 else:
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
118 # no descendants for this revision, check diff with saved parents
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
119 for p in branches[branch]:
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
120 for filename, linenum, msg in trailing_whitespace(repo[rev].diff(p)):
11
ff07accd0692 Don't use print; complain when used as program instead of python hook.
Sjoerd Mullender <sjoerd@acm.org>
parents: 10
diff changeset
121 ui.write('%s, line %d: %s added\n' % (filename, linenum, msg))
10
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
122 added = True
0
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
123 if added:
ae8465e44eec Script to check for inappropriate whitespace.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
124 # save the commit message so we don't need to retype it
10
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
125 if source != 'serve':
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
126 cmtsv = os.path.join('.hg','commit.save')
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
127 subprocess.call(['hg', 'tip', '--template', '{desc}'],
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
128 stdout=open(cmtsv, 'w'))
11
ff07accd0692 Don't use print; complain when used as program instead of python hook.
Sjoerd Mullender <sjoerd@acm.org>
parents: 10
diff changeset
129 ui.write('commit message saved to %s\n' % cmtsv)
10
bd1ca3d502d6 Do not check intermediate changesets for errors, only final result.
Sjoerd Mullender <sjoerd@acm.org>
parents: 9
diff changeset
130 return 1
3
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
131
561cb4f73b83 Turn into proper hook function (with backward compatibility).
Sjoerd Mullender <sjoerd@acm.org>
parents: 2
diff changeset
132 if __name__ == '__main__':
11
ff07accd0692 Don't use print; complain when used as program instead of python hook.
Sjoerd Mullender <sjoerd@acm.org>
parents: 10
diff changeset
133 import sys
ff07accd0692 Don't use print; complain when used as program instead of python hook.
Sjoerd Mullender <sjoerd@acm.org>
parents: 10
diff changeset
134 sys.stderr.write('call this hook using the Python interface.\n'
ff07accd0692 Don't use print; complain when used as program instead of python hook.
Sjoerd Mullender <sjoerd@acm.org>
parents: 10
diff changeset
135 'In your .hgrc file you shoud have:\n'
ff07accd0692 Don't use print; complain when used as program instead of python hook.
Sjoerd Mullender <sjoerd@acm.org>
parents: 10
diff changeset
136 'pretxncommit.whitespace = python:<path-to-check_whitespace-directory>/check_whitespace.py:hook\n')
ff07accd0692 Don't use print; complain when used as program instead of python hook.
Sjoerd Mullender <sjoerd@acm.org>
parents: 10
diff changeset
137
ff07accd0692 Don't use print; complain when used as program instead of python hook.
Sjoerd Mullender <sjoerd@acm.org>
parents: 10
diff changeset
138 sys.exit(1)