Add version_sort utility function

This commit is contained in:
Mathieu Comandon 2016-08-19 20:23:34 -07:00
parent ac3f07bafe
commit 1030d16862
2 changed files with 49 additions and 0 deletions

View file

@ -31,3 +31,18 @@ def lookup_string_in_text(string, text):
for line in output_lines:
if string in line:
return line
def version_sort(versions, reverse=False):
def version_key(version):
version_match = re.search(r'(\d[\d\.]+\d)', version)
if not version_match:
return
version_number = version_match.groups()[0]
prefix = version[0:version_match.span()[0]]
suffix = version[version_match.span()[1]:]
version = [int(p) for p in version_number.split('.')]
version.append(prefix)
version.append(suffix)
return version
return sorted(versions, key=version_key, reverse=reverse)

View file

@ -76,3 +76,37 @@ class TestStringUtils(TestCase):
'bar <a href="http://strycore.com">http://strycore.com</a>'
)
self.assertEqual(strings.add_url_tags(text), expected)
class TestVersionSort(TestCase):
def test_versions_are_correctly_sorted(self):
versions = ['1.8', '1.7.4', '1.9.1', '1.9.10', '1.9.4']
versions = strings.version_sort(versions)
self.assertEqual(versions[0], '1.7.4')
self.assertEqual(versions[1], '1.8')
self.assertEqual(versions[2], '1.9.1')
self.assertEqual(versions[3], '1.9.4')
self.assertEqual(versions[4], '1.9.10')
def test_version_sorting_supports_extra_strings(self):
versions = [
'1.8', '1.8-staging',
'1.7.4', '1.9.1',
'1.9.10-staging', '1.9.10',
'1.9.4', 'staging-1.9.4'
]
versions = strings.version_sort(versions)
self.assertEqual(versions[0], '1.7.4')
self.assertEqual(versions[1], '1.8')
self.assertEqual(versions[2], '1.8-staging')
self.assertEqual(versions[3], '1.9.1')
self.assertEqual(versions[4], '1.9.4')
self.assertEqual(versions[5], 'staging-1.9.4')
self.assertEqual(versions[6], '1.9.10')
self.assertEqual(versions[7], '1.9.10-staging')
def test_versions_can_be_reversed(self):
versions = ['1.9', '1.6', '1.7', '1.8']
versions = strings.version_sort(versions, reverse=True)
self.assertEqual(versions[0], '1.9')
self.assertEqual(versions[3], '1.6')