From 9e6c65356328fee859a5de7a58ad86fed04f3fc1 Mon Sep 17 00:00:00 2001 From: Geron Date: Fri, 18 Mar 2016 15:44:46 +0800 Subject: [PATCH 1/4] Update semver.py add two match model for '~' and '^' --- semver.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/semver.py b/semver.py index c14d9651..dabb1fef 100644 --- a/semver.py +++ b/semver.py @@ -13,7 +13,6 @@ if not hasattr(__builtins__, 'cmp'): cmp = lambda a, b: (a > b) - (a < b) - def parse(version): """ Parse version to major, minor, patch, pre-release, build parts. @@ -30,7 +29,6 @@ def parse(version): return verinfo - def compare(ver1, ver2): def nat_cmp(a, b): a, b = a or '', b or '' @@ -89,7 +87,6 @@ def match(version, match_expr): return cmp_res in possibilities - def max_ver(ver1, ver2): cmp_res = compare(ver1, ver2) if cmp_res == 0 or cmp_res == 1: @@ -116,7 +113,6 @@ def format_version(major, minor, patch, prerelease=None, build=None): return version - def _increment_string(string): # look for the last sequence of number(s) in a string and increment, from: # http://code.activestate.com/recipes/442460-increment-numbers-in-a-string/#c1 @@ -127,7 +123,6 @@ def _increment_string(string): string = string[:max(end - len(next_), start)] + next_ + string[end:] return string - def bump_major(version): verinfo = parse(version) return format_version(verinfo['major'] + 1, 0, 0) From fb1108fb5ab48841b3415156cadb3c181eaa14f6 Mon Sep 17 00:00:00 2001 From: Geron Date: Fri, 18 Mar 2016 15:46:39 +0800 Subject: [PATCH 2/4] Update semver.py add two match model for '~' and '^' --- semver.py | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/semver.py b/semver.py index dabb1fef..61370f44 100644 --- a/semver.py +++ b/semver.py @@ -1,3 +1,4 @@ + # -*- coding: utf-8 -*- import re @@ -13,6 +14,7 @@ if not hasattr(__builtins__, 'cmp'): cmp = lambda a, b: (a > b) - (a < b) + def parse(version): """ Parse version to major, minor, patch, pre-release, build parts. @@ -29,6 +31,7 @@ def parse(version): return verinfo + def compare(ver1, ver2): def nat_cmp(a, b): a, b = a or '', b or '' @@ -66,7 +69,7 @@ def match(version, match_expr): prefix = match_expr[:2] if prefix in ('>=', '<=', '=='): match_version = match_expr[2:] - elif prefix and prefix[0] in ('>', '<', '='): + elif prefix and prefix[0] in ('>', '<', '=', '~', '^'): prefix = prefix[0] match_version = match_expr[1:] else: @@ -79,13 +82,49 @@ def match(version, match_expr): '<': (-1,), '==': (0,), '>=': (0, 1), - '<=': (-1, 0) + '<=': (-1, 0), + '~': (0, 1), + '^': (0, 1), } possibilities = possibilities_dict[prefix] - cmp_res = compare(version, match_version) - return cmp_res in possibilities + cmp_res = compare(version, match_version) # 0,1,-1 + + if prefix in ('^',): + if cmp_res in possibilities: + v = parse(match_version) + if v.get('mojar') is 0: + if v.get('minor') is 0: + cmp_res = compare(version, bump_patch(match_version)) + if cmp_res in possibilities_dict['<']: + return True + else: + return False + else: + cmp_res = compare(version, bump_minor(match_version)) + if cmp_res in possibilities_dict['<']: + return True + else: + return False + else: + cmp_res = compare(version, bump_mojar(match_version)) + if cmp_res in possibilities_dict['<']: + return True + else: + return False + elif prefix in ('~',): + if cmp_res in possibilities: + cmp_res = compare(version, bump_minor(match_version)) + if cmp_res in possibilities_dict['<']: + return True + else: + return False + else: + return False + else: + return cmp_res in possibilities + def max_ver(ver1, ver2): cmp_res = compare(ver1, ver2) @@ -113,6 +152,7 @@ def format_version(major, minor, patch, prerelease=None, build=None): return version + def _increment_string(string): # look for the last sequence of number(s) in a string and increment, from: # http://code.activestate.com/recipes/442460-increment-numbers-in-a-string/#c1 @@ -123,6 +163,7 @@ def _increment_string(string): string = string[:max(end - len(next_), start)] + next_ + string[end:] return string + def bump_major(version): verinfo = parse(version) return format_version(verinfo['major'] + 1, 0, 0) From d482af28df183237a8e2b828eab7d9b5c50313bd Mon Sep 17 00:00:00 2001 From: Geron Date: Fri, 18 Mar 2016 16:01:07 +0800 Subject: [PATCH 3/4] Update semver.py --- semver.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/semver.py b/semver.py index 61370f44..7e5c5a33 100644 --- a/semver.py +++ b/semver.py @@ -89,12 +89,12 @@ def match(version, match_expr): possibilities = possibilities_dict[prefix] - cmp_res = compare(version, match_version) # 0,1,-1 + cmp_res = compare(version, match_version) if prefix in ('^',): if cmp_res in possibilities: v = parse(match_version) - if v.get('mojar') is 0: + if v.get('major') is 0: if v.get('minor') is 0: cmp_res = compare(version, bump_patch(match_version)) if cmp_res in possibilities_dict['<']: @@ -108,7 +108,7 @@ def match(version, match_expr): else: return False else: - cmp_res = compare(version, bump_mojar(match_version)) + cmp_res = compare(version, bump_major(match_version)) if cmp_res in possibilities_dict['<']: return True else: From 4290c7bf64b2b0982bfe5dc8faddacc275d71e18 Mon Sep 17 00:00:00 2001 From: Geron Date: Fri, 18 Mar 2016 16:02:19 +0800 Subject: [PATCH 4/4] Update semver.py --- semver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semver.py b/semver.py index 7e5c5a33..f984a5e4 100644 --- a/semver.py +++ b/semver.py @@ -84,7 +84,7 @@ def match(version, match_expr): '>=': (0, 1), '<=': (-1, 0), '~': (0, 1), - '^': (0, 1), + '^': (0, 1) } possibilities = possibilities_dict[prefix]