hgbook

annotate fr/examples/ch09/check_whitespace.py.lst @ 966:39d37f84beaf

adding more new files - probably generated but still in versionning
author Romain PELISSE <belaran@gmail.com>
date Sun Aug 16 13:20:24 2009 +0200 (2009-08-16)
parents
children
rev   line source
belaran@966 1 #!/usr/bin/env python
belaran@966 2 #
belaran@966 3 # save as .hg/check_whitespace.py and make executable
belaran@966 4
belaran@966 5 import re
belaran@966 6
belaran@966 7 def trailing_whitespace(difflines):
belaran@966 8 #
belaran@966 9 linenum, header = 0, False
belaran@966 10
belaran@966 11 for line in difflines:
belaran@966 12 if header:
belaran@966 13 # remember the name of the file that this diff affects
belaran@966 14 m = re.match(r'(?:---|\+\+\+) ([^\t]+)', line)
belaran@966 15 if m and m.group(1) != '/dev/null':
belaran@966 16 filename = m.group(1).split('/', 1)[-1]
belaran@966 17 if line.startswith('+++ '):
belaran@966 18 header = False
belaran@966 19 continue
belaran@966 20 if line.startswith('diff '):
belaran@966 21 header = True
belaran@966 22 continue
belaran@966 23 # hunk header - save the line number
belaran@966 24 m = re.match(r'@@ -\d+,\d+ \+(\d+),', line)
belaran@966 25 if m:
belaran@966 26 linenum = int(m.group(1))
belaran@966 27 continue
belaran@966 28 # hunk body - check for an added line with trailing whitespace
belaran@966 29 m = re.match(r'\+.*\s$', line)
belaran@966 30 if m:
belaran@966 31 yield filename, linenum
belaran@966 32 if line and line[0] in ' +':
belaran@966 33 linenum += 1
belaran@966 34
belaran@966 35 if __name__ == '__main__':
belaran@966 36 import os, sys
belaran@966 37
belaran@966 38 added = 0
belaran@966 39 for filename, linenum in trailing_whitespace(os.popen('hg export tip')):
belaran@966 40 print >> sys.stderr, ('%s, line %d: trailing whitespace added' %
belaran@966 41 (filename, linenum))
belaran@966 42 added += 1
belaran@966 43 if added:
belaran@966 44 # save the commit message so we don't need to retype it
belaran@966 45 os.system('hg tip --template "{desc}" > .hg/commit.save')
belaran@966 46 print >> sys.stderr, 'commit message saved to .hg/commit.save'
belaran@966 47 sys.exit(1)