From 2d5ae01d8cba8b11824cd8dab0019794da722dbf Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Fri, 22 Dec 2017 11:27:02 +0900 Subject: [PATCH] prefer key for sorting --- binaryen-tags.txt | 6 +++- emscripten-tags.txt | 6 +++- emsdk | 85 +++++++-------------------------------------- 3 files changed, 22 insertions(+), 75 deletions(-) diff --git a/binaryen-tags.txt b/binaryen-tags.txt index fdb6fe3..72833e6 100644 --- a/binaryen-tags.txt +++ b/binaryen-tags.txt @@ -33,4 +33,8 @@ 1.37.19 1.37.20 1.37.21 -1.37.22 \ No newline at end of file +1.37.22 +1.37.23 +1.37.24 +1.37.25 +1.37.26 \ No newline at end of file diff --git a/emscripten-tags.txt b/emscripten-tags.txt index 1dd8370..38f7da1 100644 --- a/emscripten-tags.txt +++ b/emscripten-tags.txt @@ -106,4 +106,8 @@ 1.37.19 1.37.20 1.37.21 -1.37.22 \ No newline at end of file +1.37.22 +1.37.23 +1.37.24 +1.37.25 +1.37.26 \ No newline at end of file diff --git a/emsdk b/emsdk index 553ad69..82860b1 100755 --- a/emsdk +++ b/emsdk @@ -1473,45 +1473,8 @@ def find_used_python(): return t return None -# Performs a ver >= target comparison -def is_version_equal_or_newer(ver, target): - 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 +def version_key(ver): + return map(int, re.split('[._-]', ver)) # 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): @@ -1543,11 +1506,11 @@ def fetch_emscripten_tags(): for t in tags.split('\n'): try: 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] except: 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)) if len(all_tags) > 0: 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] except: 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)) if len(binaryen_tags) > 0: 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)] 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: @@ -1661,7 +1600,7 @@ def load_file_index_list(filename): 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 = python_2_3_sorted(items, cmp=sort_by_version)[::-1] + items = sorted(items, key=version_key)[::-1] return items except: @@ -1711,12 +1650,12 @@ def load_sdk_manifest(): return True def cmp_version(ver, cmp_operand, reference): - if cmp_operand == '<=': return is_version_equal_or_older(ver, reference) - if cmp_operand == '<': return is_version_strictly_older_than(ver, reference) - if cmp_operand == '>=': return is_version_equal_or_newer(ver, reference) - if cmp_operand == '>': return is_version_strictly_newer_than(ver, reference) - if cmp_operand == '==': return is_version_equal(ver, reference) - if cmp_operand == '!=': return is_version_not_equal(ver, reference) + if cmp_operand == '<=': return version_key(ver) <= version_key(reference) + if cmp_operand == '<': return version_key(ver) < version_key(reference) + if cmp_operand == '>=': return version_key(ver) >= version_key(reference) + if cmp_operand == '>': return version_key(ver) > version_key(reference) + if cmp_operand == '==': return version_key(ver) == version_key(reference) + if cmp_operand == '!=': return version_key(ver) != version_key(reference) raise Exception('Invalid cmp_operand "' + cmp_operand + '"!') def passes_filters(param, ver, filters):