From 78759ad17622e5af7fb4698e77fd33500b3e55b1 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Sun, 22 Jul 2007 09:08:05 -0700 Subject: [PATCH 1/2] fix the style fixing thing --HG-- extra : convert_revision : 65ffc14e7b78b49df9a67ef0d3521551dd44d1cd --- util/style.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/style.py b/util/style.py index 3824cd7f5..47c992755 100644 --- a/util/style.py +++ b/util/style.py @@ -84,7 +84,7 @@ def checkwhite(filename): if not checkwhite_line(line): yield line,num + 1 -def fixwhite_line(line): +def fixwhite_line(line, tabsize): if lead.search(line): newline = '' for i,c in enumerate(line): @@ -117,7 +117,7 @@ def fixwhite(filename, tabsize, fixonly=None): for i,line in enumerate(lines): if fixonly is None or i in fixonly: - line = fixwhite_line(line) + line = fixwhite_line(line, tabsize) print >>f, line, From 089fce4f59fd0086202e9cf5f7b2a46c6545f7b6 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Sun, 22 Jul 2007 13:45:12 -0700 Subject: [PATCH 2/2] do proper style checks for merged files --HG-- extra : convert_revision : f9d4c61ded4b13655dbe86f0bb6a0b3beaf45151 --- util/style.py | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/util/style.py b/util/style.py index 47c992755..b5e9e142e 100644 --- a/util/style.py +++ b/util/style.py @@ -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,25 +284,26 @@ 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: - if checkwhite_line(line): - continue + for i,line in enumerate(mdiff.splitnewlines(file_data)): + if i not in mod_lines: + continue - ui.write("invalid whitespace: %s:%d\n" % (fname, i+1)) - if verbose: - ui.write(">>%s<<\n" % line[:-1]) - fixonly.add(i) - elif i + 1 >= fend: - break + if checkwhite_line(line): + continue + + ui.write("invalid whitespace: %s:%d\n" % (fname, i+1)) + if verbose: + ui.write(">>%s<<\n" % line[:-1]) + fixonly.add(i) if fixonly: if prompt(fname, fixonly):