summaryrefslogtreecommitdiff
path: root/sphinx/versioning.py
diff options
context:
space:
mode:
authorDasIch <dasdasich@gmail.com>2010-08-15 21:25:31 +0200
committerDasIch <dasdasich@gmail.com>2010-08-15 21:25:31 +0200
commit3542ae7553f8fb767de577cf0456291da8ac84e9 (patch)
treeb9cfc949f23612da0d725efdc5413edf047bd96e /sphinx/versioning.py
parent209553e565d38503bc0264682ad13ed8435acf52 (diff)
downloadsphinx-3542ae7553f8fb767de577cf0456291da8ac84e9.tar.gz
Optimized merging algorithm
Diffstat (limited to 'sphinx/versioning.py')
-rw-r--r--sphinx/versioning.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/sphinx/versioning.py b/sphinx/versioning.py
index 75362904..5f325455 100644
--- a/sphinx/versioning.py
+++ b/sphinx/versioning.py
@@ -45,11 +45,17 @@ def merge_doctrees(old, new, condition):
old_nodes = old.traverse(condition)
new_nodes = new.traverse(condition)
ratios = defaultdict(list)
+ seen = set()
for old_node, new_node in product(old_nodes, new_nodes):
- ratios[old_node, new_node] = get_ratio(old_node.rawsource,
- new_node.rawsource)
+ 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))
- seen = set()
for (old_node, new_node), ratio in ratios:
if new_node in seen:
continue