summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polytechnique.org>2016-02-12 00:48:24 +0100
committerRaphaël Barrois <raphael.barrois@polytechnique.org>2016-02-12 00:48:24 +0100
commit9f4ccad84b77b761f7e2032a8617a5b8d54d9008 (patch)
tree45e6f1efd6e23df72639ba67f44128d05fc3e6ad
parentd6e5651c340b55606d1f6d346e36ad34935335b6 (diff)
parent15277fdb8ec28790232b4df614e65c8894ef0904 (diff)
downloadsemantic-version-9f4ccad84b77b761f7e2032a8617a5b8d54d9008.tar.gz
Merge branch 'skwashd-tilde-caret'
-rw-r--r--CREDITS1
-rw-r--r--semantic_version/base.py20
-rwxr-xr-xtests/test_match.py29
3 files changed, 47 insertions, 3 deletions
diff --git a/CREDITS b/CREDITS
index c4530ab..53fdef1 100644
--- a/CREDITS
+++ b/CREDITS
@@ -22,6 +22,7 @@ The project has received contributions from (in alphabetical order):
* Hugo Rodger-Brown <hugo@yunojuno.com> (https://github.com/yunojuno)
* Michael Hrivnak <mhrivnak@hrivnak.org> (https://github.com/mhrivnak)
* William Minchin <w_minchin@hotmail.com> (https://github.com/minchinweb)
+* Dave Hall <skwadhd@gmail.com> (https://github.com/skwashd)
Contributor license agreement
diff --git a/semantic_version/base.py b/semantic_version/base.py
index c81a3de..7451e14 100644
--- a/semantic_version/base.py
+++ b/semantic_version/base.py
@@ -398,11 +398,15 @@ class SpecItem(object):
KIND_LT = '<'
KIND_LTE = '<='
KIND_EQUAL = '=='
+ KIND_SHORTEQ = '='
+ KIND_EMPTY = ''
KIND_GTE = '>='
KIND_GT = '>'
KIND_NEQ = '!='
+ KIND_CARET = '^'
+ KIND_TILDE = '~'
- re_spec = re.compile(r'^(<|<=|==|>=|>|!=)(\d.*)$')
+ re_spec = re.compile(r'^(<|<=|={,2}|>=|>|!=|\^|~)(\d.*)$')
def __init__(self, requirement_string):
kind, spec = self.parse(requirement_string)
@@ -437,7 +441,7 @@ class SpecItem(object):
return version < self.spec
elif self.kind == self.KIND_LTE:
return version <= self.spec
- elif self.kind == self.KIND_EQUAL:
+ elif self.kind in [self.KIND_EQUAL, self.KIND_SHORTEQ, self.KIND_EMPTY]:
return version == self.spec
elif self.kind == self.KIND_GTE:
return version >= self.spec
@@ -445,9 +449,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)
diff --git a/tests/test_match.py b/tests/test_match.py
index c191168..9955b9f 100755
--- a/tests/test_match.py
+++ b/tests/test_match.py
@@ -14,19 +14,23 @@ class MatchTestCase(unittest.TestCase):
'!0.1',
'<=0.1.4a',
'>0.1.1.1',
- '~0.1.2-rc23,1',
'<0.1.2-rc1.3-14.15+build.2012-01-01.11h34',
]
valid_specs = [
'*',
'==0.1.0',
+ '=0.1.0',
+ '0.1.0',
'<=0.1.1',
'<0.1',
+ '1',
'>0.1.2-rc1',
'>=0.1.2-rc1.3.4',
'==0.1.2+build42-12.2012-01-01.12h23',
'!=0.1.2-rc1.3-14.15+build.2012-01-01.11h34',
+ '^0.1.2',
+ '~0.1.2',
]
matches = {
@@ -47,6 +51,18 @@ class MatchTestCase(unittest.TestCase):
'0.1.2+build42-12.2012-01-01.12h23',
'0.1.2-rc1.3-14.15+build.2012-01-01.11h34',
],
+ '=0.1.2': [
+ '0.1.2-rc1',
+ '0.1.2-rc1.3.4',
+ '0.1.2+build42-12.2012-01-01.12h23',
+ '0.1.2-rc1.3-14.15+build.2012-01-01.11h34',
+ ],
+ '0.1.2': [
+ '0.1.2-rc1',
+ '0.1.2-rc1.3.4',
+ '0.1.2+build42-12.2012-01-01.12h23',
+ '0.1.2-rc1.3-14.15+build.2012-01-01.11h34',
+ ],
'<=0.1.2': [
'0.1.1',
'0.1.2-rc1',
@@ -86,6 +102,17 @@ class MatchTestCase(unittest.TestCase):
'0.1.1-rc4',
'0.1.0+12.3',
],
+ '^0.1.2': [
+ '0.1.2',
+ '0.1.2+build4.5',
+ '0.1.3-rc1.3',
+ '0.2.0',
+ ],
+ '~0.1.2': [
+ '0.1.2',
+ '0.1.2+build4.5',
+ '0.1.3-rc1.3',
+ ],
}
def test_invalid(self):