Implement natural sorting so that our version number is correct.

This commit is contained in:
Raoul Snyman 2012-07-08 21:46:40 +02:00
parent c1db424460
commit 14088e71bb

View File

@ -28,10 +28,53 @@
############################################################################### ###############################################################################
from setuptools import setup, find_packages from setuptools import setup, find_packages
import re
VERSION_FILE = 'openlp/.version' VERSION_FILE = 'openlp/.version'
try: try:
def natural_sort_key(s):
"""
Return a tuple by which s is sorted.
``s``
A string value from the list we want to sort.
"""
def try_int(s):
"""
Convert string s to an integer if possible. Fail silently and return
the string as-is if it isn't an integer.
``s``
The string to try to convert.
"""
try:
return int(s)
except:
return s
return map(try_int, re.findall(r'(\d+|\D+)', s))
def natural_compare(a, b):
"""
Compare two strings naturally and return the result.
``a``
A string to compare.
``b``
A string to compare.
"""
return cmp(natural_sort_key(a), natural_sort_key(b))
def natural_sort(seq, compare=natural_compare):
"""
Returns a copy of seq, sorted by natural string sort.
"""
import copy
temp = copy.copy(seq)
temp.sort(compare)
return temp
from bzrlib.branch import Branch from bzrlib.branch import Branch
b = Branch.open_containing('.')[0] b = Branch.open_containing('.')[0]
b.lock_read() b.lock_read()
@ -46,7 +89,8 @@ try:
if revision_id in tags: if revision_id in tags:
version = u'%s' % tags[revision_id][0] version = u'%s' % tags[revision_id][0]
else: else:
version = '%s-bzr%s' % (sorted(b.tags.get_tag_dict().keys())[-1], revno) version = '%s-bzr%s' % \
(natural_sort(b.tags.get_tag_dict().keys())[-1], revno)
ver_file = open(VERSION_FILE, u'w') ver_file = open(VERSION_FILE, u'w')
ver_file.write(version) ver_file.write(version)
ver_file.close() ver_file.close()