Fix get_ratio for empty strings

This commit is contained in:
Daniel Neuhäuser 2010-08-16 08:18:10 +02:00
parent 36a0aa1667
commit 97bf9b01af
2 changed files with 11 additions and 2 deletions

View File

@ -20,6 +20,9 @@ except ImportError:
from sphinx.util import PeekableIterator from sphinx.util import PeekableIterator
# anything below that ratio is considered equal/changed
VERSIONING_RATIO = 65
def add_uids(doctree, condition): def add_uids(doctree, condition):
""" """
Adds a unique id to every node in the `doctree` which matches the condition Adds a unique id to every node in the `doctree` which matches the condition
@ -88,7 +91,7 @@ def merge_doctrees(old, new, condition):
continue continue
else: else:
seen.add(new_node) seen.add(new_node)
if ratio < 65: if ratio < VERSIONING_RATIO:
new_node.uid = old_node.uid new_node.uid = old_node.uid
else: else:
new_node.uid = uuid4().hex new_node.uid = uuid4().hex
@ -104,6 +107,8 @@ def get_ratio(old, new):
Returns a "similiarity ratio" representing the similarity between the two Returns a "similiarity ratio" representing the similarity between the two
strings where 0 is equal and anything above less than equal. strings where 0 is equal and anything above less than equal.
""" """
if not all([old, new]):
return VERSIONING_RATIO
return levenshtein_distance(old, new) / (len(old) / 100.0) return levenshtein_distance(old, new) / (len(old) / 100.0)
def levenshtein_distance(a, b): def levenshtein_distance(a, b):

View File

@ -16,7 +16,7 @@ from docutils.statemachine import ViewList
from docutils.parsers.rst.directives.html import MetaBody from docutils.parsers.rst.directives.html import MetaBody
from sphinx import addnodes from sphinx import addnodes
from sphinx.versioning import add_uids, merge_doctrees from sphinx.versioning import add_uids, merge_doctrees, get_ratio
def setup_module(): def setup_module():
global app, original, original_uids global app, original, original_uids
@ -39,6 +39,10 @@ def on_doctree_resolved(app, doctree, docname):
def is_paragraph(node): def is_paragraph(node):
return node.__class__.__name__ == 'paragraph' return node.__class__.__name__ == 'paragraph'
def test_get_ratio():
assert get_ratio('', 'a')
assert get_ratio('a', '')
def test_add_uids(): def test_add_uids():
assert len(original_uids) == 3 assert len(original_uids) == 3