mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Optimized merging algorithm
This commit is contained in:
parent
ad5b5c740b
commit
e68b1cacd0
@ -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
|
||||
|
@ -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'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user