prefer key for sorting
This commit is contained in:
@@ -33,4 +33,8 @@
|
|||||||
1.37.19
|
1.37.19
|
||||||
1.37.20
|
1.37.20
|
||||||
1.37.21
|
1.37.21
|
||||||
1.37.22
|
1.37.22
|
||||||
|
1.37.23
|
||||||
|
1.37.24
|
||||||
|
1.37.25
|
||||||
|
1.37.26
|
||||||
@@ -106,4 +106,8 @@
|
|||||||
1.37.19
|
1.37.19
|
||||||
1.37.20
|
1.37.20
|
||||||
1.37.21
|
1.37.21
|
||||||
1.37.22
|
1.37.22
|
||||||
|
1.37.23
|
||||||
|
1.37.24
|
||||||
|
1.37.25
|
||||||
|
1.37.26
|
||||||
85
emsdk
85
emsdk
@@ -1473,45 +1473,8 @@ def find_used_python():
|
|||||||
return t
|
return t
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Performs a ver >= target comparison
|
def version_key(ver):
|
||||||
def is_version_equal_or_newer(ver, target):
|
return map(int, re.split('[._-]', ver))
|
||||||
ver = ver.replace('-', '.').replace('_', '.').split('.')
|
|
||||||
target = target.replace('-', '.').replace('_', '.').split('.')
|
|
||||||
while len(ver) < len(target):
|
|
||||||
ver += ['0']
|
|
||||||
while len(target) < len(ver):
|
|
||||||
target += ['0']
|
|
||||||
for i in range(len(ver)):
|
|
||||||
if int(ver[i]) < int(target[i]):
|
|
||||||
return False
|
|
||||||
elif int(ver[i]) > int(target[i]):
|
|
||||||
return True
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Tests ver < target
|
|
||||||
def is_version_strictly_older_than(ver, target):
|
|
||||||
return not is_version_equal_or_newer(ver, target)
|
|
||||||
|
|
||||||
# Tests ver <= target
|
|
||||||
def is_version_equal_or_older(ver, target):
|
|
||||||
return is_version_equal_or_newer(target, ver)
|
|
||||||
|
|
||||||
# Tests ver > target
|
|
||||||
def is_version_strictly_newer_than(ver, target):
|
|
||||||
return not is_version_equal_or_older(ver, target)
|
|
||||||
|
|
||||||
# Performs a ver == target comparison
|
|
||||||
def is_version_equal(ver, target):
|
|
||||||
return is_version_equal_or_newer(ver, target) and is_version_equal_or_newer(target, ver)
|
|
||||||
|
|
||||||
# Performs a ver != target comparison
|
|
||||||
def is_version_not_equal(ver, target):
|
|
||||||
return not is_version_equal_or_newer(ver, target) or not is_version_equal_or_newer(target, ver)
|
|
||||||
|
|
||||||
def version_compare(x, y):
|
|
||||||
a = 1 if is_version_equal_or_newer(x, y) else 0
|
|
||||||
b = 1 if is_version_equal_or_newer(y, x) else 0
|
|
||||||
return a - b
|
|
||||||
|
|
||||||
# A sort function that is compatible with both Python 2 and Python 3 using a custom comparison function.
|
# A sort function that is compatible with both Python 2 and Python 3 using a custom comparison function.
|
||||||
def python_2_3_sorted(arr, cmp):
|
def python_2_3_sorted(arr, cmp):
|
||||||
@@ -1543,11 +1506,11 @@ def fetch_emscripten_tags():
|
|||||||
for t in tags.split('\n'):
|
for t in tags.split('\n'):
|
||||||
try:
|
try:
|
||||||
t = t[t.index('refs/tags/') + len('refs/tags/'):].strip()
|
t = t[t.index('refs/tags/') + len('refs/tags/'):].strip()
|
||||||
if is_version_equal_or_newer(t, '1.28.2'):
|
if version_key(t) >= version_key('1.28.2'):
|
||||||
all_tags += [t]
|
all_tags += [t]
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
all_tags = python_2_3_sorted(all_tags, cmp=version_compare)
|
all_tags = sorted(all_tags, key=version_key)
|
||||||
open(sdk_path('emscripten-tags.txt'), 'w').write('\n'.join(all_tags))
|
open(sdk_path('emscripten-tags.txt'), 'w').write('\n'.join(all_tags))
|
||||||
if len(all_tags) > 0:
|
if len(all_tags) > 0:
|
||||||
print('Done. ' + str(len(all_tags)) + ' tagged releases available, latest is ' + all_tags[-1] + '.')
|
print('Done. ' + str(len(all_tags)) + ' tagged releases available, latest is ' + all_tags[-1] + '.')
|
||||||
@@ -1566,7 +1529,7 @@ def fetch_emscripten_tags():
|
|||||||
binaryen_tags += [t]
|
binaryen_tags += [t]
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
binaryen_tags = python_2_3_sorted(binaryen_tags, cmp=version_compare)
|
binaryen_tags = sorted(binaryen_tags, key=version_key)
|
||||||
open(sdk_path('binaryen-tags.txt'), 'w').write('\n'.join(binaryen_tags))
|
open(sdk_path('binaryen-tags.txt'), 'w').write('\n'.join(binaryen_tags))
|
||||||
if len(binaryen_tags) > 0:
|
if len(binaryen_tags) > 0:
|
||||||
print('Done. ' + str(len(binaryen_tags)) + ' tagged Binaryen releases available, latest is ' + binaryen_tags[-1] + '.')
|
print('Done. ' + str(len(binaryen_tags)) + ' tagged Binaryen releases available, latest is ' + binaryen_tags[-1] + '.')
|
||||||
@@ -1629,30 +1592,6 @@ def remove_suffix(s, suffix):
|
|||||||
if s.endswith(suffix): return s[:len(s)-len(suffix)]
|
if s.endswith(suffix): return s[:len(s)-len(suffix)]
|
||||||
else: return s
|
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'
|
# 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):
|
def load_file_index_list(filename):
|
||||||
try:
|
try:
|
||||||
@@ -1661,7 +1600,7 @@ def load_file_index_list(filename):
|
|||||||
items = filter(lambda x: 'latest' not in x and len(x) > 0, 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')
|
# Sort versions from oldest to newest (the default sort would be lexicographic, i.e. '1.37.1 < 1.37.10 < 1.37.2')
|
||||||
items = python_2_3_sorted(items, cmp=sort_by_version)[::-1]
|
items = sorted(items, key=version_key)[::-1]
|
||||||
|
|
||||||
return items
|
return items
|
||||||
except:
|
except:
|
||||||
@@ -1711,12 +1650,12 @@ def load_sdk_manifest():
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def cmp_version(ver, cmp_operand, reference):
|
def cmp_version(ver, cmp_operand, reference):
|
||||||
if cmp_operand == '<=': return is_version_equal_or_older(ver, reference)
|
if cmp_operand == '<=': return version_key(ver) <= version_key(reference)
|
||||||
if cmp_operand == '<': return is_version_strictly_older_than(ver, reference)
|
if cmp_operand == '<': return version_key(ver) < version_key(reference)
|
||||||
if cmp_operand == '>=': return is_version_equal_or_newer(ver, reference)
|
if cmp_operand == '>=': return version_key(ver) >= version_key(reference)
|
||||||
if cmp_operand == '>': return is_version_strictly_newer_than(ver, reference)
|
if cmp_operand == '>': return version_key(ver) > version_key(reference)
|
||||||
if cmp_operand == '==': return is_version_equal(ver, reference)
|
if cmp_operand == '==': return version_key(ver) == version_key(reference)
|
||||||
if cmp_operand == '!=': return is_version_not_equal(ver, reference)
|
if cmp_operand == '!=': return version_key(ver) != version_key(reference)
|
||||||
raise Exception('Invalid cmp_operand "' + cmp_operand + '"!')
|
raise Exception('Invalid cmp_operand "' + cmp_operand + '"!')
|
||||||
|
|
||||||
def passes_filters(param, ver, filters):
|
def passes_filters(param, ver, filters):
|
||||||
|
|||||||
Reference in New Issue
Block a user