do proper style checks for merged files

--HG--
extra : convert_revision : f9d4c61ded4b13655dbe86f0bb6a0b3beaf45151
This commit is contained in:
Nathan Binkert 2007-07-22 13:45:12 -07:00
parent 78759ad176
commit 089fce4f59

View file

@ -230,8 +230,23 @@ def validate(filename, stats, verbose, exit_code):
msg(i, line, 'improper spacing after %s' % match.group(1))
bad()
def modified_lines(old_data, new_data):
from itertools import count
from mercurial import bdiff, mdiff
modified = set()
counter = count()
for pbeg, pend, fbeg, fend in bdiff.blocks(old_data, new_data):
for i in counter:
if i < fbeg:
modified.add(i)
elif i + 1 >= fend:
break
return modified
def check_whitespace(ui, repo, hooktype, node, parent1, parent2):
from mercurial import bdiff, mdiff, util
from mercurial import mdiff
if hooktype != 'pretxncommit':
raise AttributeError, \
"This hook is only meant for pretxncommit, not %s" % hooktype
@ -269,16 +284,19 @@ def check_whitespace(ui, repo, hooktype, node, parent1, parent2):
for fname in modified:
fctx = wctx.filectx(fname)
pctx = fctx.parents()
assert len(pctx) == 1
assert len(pctx) in (1, 2)
pdata = pctx[0].data()
fdata = fctx.data()
file_data = fctx.data()
mod_lines = modified_lines(pctx[0].data(), file_data)
if len(pctx) == 2:
m2 = modified_lines(pctx[1].data(), file_data)
mod_lines = mod_lines & m2 # only the lines that are new in both
fixonly = set()
lines = enumerate(mdiff.splitnewlines(fdata))
for pbeg, pend, fbeg, fend in bdiff.blocks(pdata, fdata):
for i, line in lines:
if i < fbeg:
for i,line in enumerate(mdiff.splitnewlines(file_data)):
if i not in mod_lines:
continue
if checkwhite_line(line):
continue
@ -286,8 +304,6 @@ def check_whitespace(ui, repo, hooktype, node, parent1, parent2):
if verbose:
ui.write(">>%s<<\n" % line[:-1])
fixonly.add(i)
elif i + 1 >= fend:
break
if fixonly:
if prompt(fname, fixonly):