summaryrefslogtreecommitdiff
path: root/semantic_version
diff options
context:
space:
mode:
authorDave Hall <dave.hall@skwashd.com>2015-10-15 11:41:19 +1100
committerDave Hall <dave.hall@skwashd.com>2015-10-15 11:41:19 +1100
commit5ca781f439e8d402ada7f51c31d21ba211f673b6 (patch)
treec894120645b1d6d7caa32a1f3e975bbb66ce7cda /semantic_version
parent2ed3d39c291080c61edd9139370939e1fdc3209a (diff)
downloadsemantic-version-5ca781f439e8d402ada7f51c31d21ba211f673b6.tar.gz
Add support for npm/composer caret and tilde condition extensions
Diffstat (limited to 'semantic_version')
-rw-r--r--semantic_version/base.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/semantic_version/base.py b/semantic_version/base.py
index 982fcc8..e001005 100644
--- a/semantic_version/base.py
+++ b/semantic_version/base.py
@@ -392,8 +392,11 @@ class SpecItem(object):
KIND_GTE = '>='
KIND_GT = '>'
KIND_NEQ = '!='
+ KIND_CARET = '^'
+ KIND_TILDE = '~'
- re_spec = re.compile(r'^(<|<=|==|>=|>|!=)(\d.*)$')
+ caret = re.escape('^')
+ re_spec = re.compile(r'^(<|<=|==|>=|>|!=|{}|~)(\d.*)$'.format(caret))
def __init__(self, requirement_string):
kind, spec = self.parse(requirement_string)
@@ -436,9 +439,21 @@ class SpecItem(object):
return version > self.spec
elif self.kind == self.KIND_NEQ:
return version != self.spec
+ elif self.kind == self.KIND_CARET:
+ return self.caretCompare(version)
+ elif self.kind == self.KIND_TILDE:
+ return self.tildeCompare(version)
else: # pragma: no cover
raise ValueError('Unexpected match kind: %r' % self.kind)
+ def caretCompare(self, version):
+ max_version = version.next_major()
+ return version >= self.spec and version < max_version
+
+ def tildeCompare(self, version):
+ max_version = version.next_minor()
+ return version >= self.spec and version < max_version
+
def __str__(self):
return '%s%s' % (self.kind, self.spec)