do proper style checks for merged files
--HG-- extra : convert_revision : f9d4c61ded4b13655dbe86f0bb6a0b3beaf45151
This commit is contained in:
parent
78759ad176
commit
089fce4f59
1 changed files with 32 additions and 16 deletions
|
@ -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):
|
||||
|
|
Loading…
Reference in a new issue