Fix a bug where sdk versions were shown in incorrectly sorted order (1.37.1 < 1.37.10 < 1.37.2)

This commit is contained in:
Jukka Jylanki
2017-05-08 15:09:46 +03:00
parent 247afc1108
commit 9330aeb094
3 changed files with 33 additions and 2 deletions

28
emsdk
View File

@@ -1524,12 +1524,40 @@ def remove_suffix(s, suffix):
if s.endswith(suffix): return s[:len(s)-len(suffix)]
else: return s
def try_int(a):
try:
return int(a)
except:
return None
def sort_by_version(a, b):
a = re.split('[\\._\\-]', a)
b = re.split('[\\._\\-]', b)
for i in range(min(len(a), len(b))):
a_int = try_int(a[i])
b_int = try_int(b[i])
if a_int != None and b_int != None:
if a_int < b_int:
return -1
if b_int > a_int:
return 1
else:
if a[i] < b[i]:
return -1
if b[i] > a[i]:
return 1
return 0
# filename should be one of: 'llvm-nightlies-32bit.txt', 'llvm-nightlies-64bit.txt', 'llvm-precompiled-tags-32bit.txt', 'llvm-precompiled-tags-64bit.txt', 'emscripten-nightlies.txt'
def load_file_index_list(filename):
try:
items = open(sdk_path(filename), 'r').read().split('\n')
items = map(lambda x: remove_suffix(remove_suffix(remove_prefix(remove_prefix(x, 'emscripten-llvm-e'), 'emscripten-nightly-'), '.tar.gz'), '.zip').strip(), items)
items = filter(lambda x: 'latest' not in x and len(x) > 0, items)
# Sort versions from oldest to newest (the default sort would be lexicographic, i.e. '1.37.1 < 1.37.10 < 1.37.2')
items = sorted(items, cmp=sort_by_version)[::-1]
return items
except:
return []