diff options
| author | DasIch <dasdasich@gmail.com> | 2010-08-15 21:25:31 +0200 |
|---|---|---|
| committer | DasIch <dasdasich@gmail.com> | 2010-08-15 21:25:31 +0200 |
| commit | 3542ae7553f8fb767de577cf0456291da8ac84e9 (patch) | |
| tree | b9cfc949f23612da0d725efdc5413edf047bd96e /sphinx/versioning.py | |
| parent | 209553e565d38503bc0264682ad13ed8435acf52 (diff) | |
| download | sphinx-3542ae7553f8fb767de577cf0456291da8ac84e9.tar.gz | |
Optimized merging algorithm
Diffstat (limited to 'sphinx/versioning.py')
| -rw-r--r-- | sphinx/versioning.py | 12 |
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 |
