Optimized merging algorithm

This commit is contained in:
Daniel Neuhäuser 2010-08-15 21:25:31 +02:00
parent ad5b5c740b
commit e68b1cacd0
2 changed files with 11 additions and 17 deletions

View File

@ -45,11 +45,17 @@ def merge_doctrees(old, new, condition):
old_nodes = old.traverse(condition)
new_nodes = new.traverse(condition)
ratios = defaultdict(list)
for old_node, new_node in product(old_nodes, new_nodes):
ratios[old_node, new_node] = get_ratio(old_node.rawsource,
new_node.rawsource)
ratios = sorted(ratios.iteritems(), key=itemgetter(1))
seen = set()
for old_node, new_node in product(old_nodes, new_nodes):
if new_node in seen:
continue
ratio = get_ratio(old_node.rawsource, new_node.rawsource)
if ratio == 0:
new_node.uid = old_node.uid
seen.add(new_node)
else:
ratios[old_node, new_node] = ratio
ratios = sorted(ratios.iteritems(), key=itemgetter(1))
for (old_node, new_node), ratio in ratios:
if new_node in seen:
continue

View File

@ -16,7 +16,7 @@ from docutils.statemachine import ViewList
from docutils.parsers.rst.directives.html import MetaBody
from sphinx import addnodes
from sphinx.versioning import make_diff, add_uids, merge_doctrees
from sphinx.versioning import add_uids, merge_doctrees
def setup_module():
global app, original, original_uids
@ -36,18 +36,6 @@ doctrees = {}
def on_doctree_resolved(app, doctree, docname):
doctrees[docname] = doctree
def test_make_diff():
tests = [
(('aaa', 'aaa'), (True, False, False)),
(('aaa', 'aab'), (False, True, False)),
(('aaa', 'abb'), (False, True, False)),
(('aaa', 'aba'), (False, True, False)),
(('aaa', 'baa'), (False, True, False)),
(('aaa', 'bbb'), (False, False, True))
]
for args, result in tests:
assert make_diff(*args) == result
def is_paragraph(node):
return node.__class__.__name__ == 'paragraph'