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))
|
msg(i, line, 'improper spacing after %s' % match.group(1))
|
||||||
bad()
|
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):
|
def check_whitespace(ui, repo, hooktype, node, parent1, parent2):
|
||||||
from mercurial import bdiff, mdiff, util
|
from mercurial import mdiff
|
||||||
|
|
||||||
if hooktype != 'pretxncommit':
|
if hooktype != 'pretxncommit':
|
||||||
raise AttributeError, \
|
raise AttributeError, \
|
||||||
"This hook is only meant for pretxncommit, not %s" % hooktype
|
"This hook is only meant for pretxncommit, not %s" % hooktype
|
||||||
|
@ -269,25 +284,26 @@ def check_whitespace(ui, repo, hooktype, node, parent1, parent2):
|
||||||
for fname in modified:
|
for fname in modified:
|
||||||
fctx = wctx.filectx(fname)
|
fctx = wctx.filectx(fname)
|
||||||
pctx = fctx.parents()
|
pctx = fctx.parents()
|
||||||
assert len(pctx) == 1
|
assert len(pctx) in (1, 2)
|
||||||
|
|
||||||
pdata = pctx[0].data()
|
file_data = fctx.data()
|
||||||
fdata = 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()
|
fixonly = set()
|
||||||
lines = enumerate(mdiff.splitnewlines(fdata))
|
for i,line in enumerate(mdiff.splitnewlines(file_data)):
|
||||||
for pbeg, pend, fbeg, fend in bdiff.blocks(pdata, fdata):
|
if i not in mod_lines:
|
||||||
for i, line in lines:
|
continue
|
||||||
if i < fbeg:
|
|
||||||
if checkwhite_line(line):
|
|
||||||
continue
|
|
||||||
|
|
||||||
ui.write("invalid whitespace: %s:%d\n" % (fname, i+1))
|
if checkwhite_line(line):
|
||||||
if verbose:
|
continue
|
||||||
ui.write(">>%s<<\n" % line[:-1])
|
|
||||||
fixonly.add(i)
|
ui.write("invalid whitespace: %s:%d\n" % (fname, i+1))
|
||||||
elif i + 1 >= fend:
|
if verbose:
|
||||||
break
|
ui.write(">>%s<<\n" % line[:-1])
|
||||||
|
fixonly.add(i)
|
||||||
|
|
||||||
if fixonly:
|
if fixonly:
|
||||||
if prompt(fname, fixonly):
|
if prompt(fname, fixonly):
|
||||||
|
|
Loading…
Reference in a new issue