Merge pull request #38 from ekmartin/compatible_release
Add support for compatible release ranges
This commit is contained in:
commit
ec2c25cd3a
1
CREDITS
1
CREDITS
|
@ -23,6 +23,7 @@ The project has received contributions from (in alphabetical order):
|
|||
* 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)
|
||||
* Martin Ek <mail@ekmartin.com> (https://github.com/ekmartin)
|
||||
|
||||
|
||||
Contributor license agreement
|
||||
|
|
|
@ -405,6 +405,7 @@ class SpecItem(object):
|
|||
KIND_NEQ = '!='
|
||||
KIND_CARET = '^'
|
||||
KIND_TILDE = '~'
|
||||
KIND_COMPATIBLE = '~='
|
||||
|
||||
# Map a kind alias to its full version
|
||||
KIND_ALIASES = {
|
||||
|
@ -412,7 +413,7 @@ class SpecItem(object):
|
|||
KIND_EMPTY: KIND_EQUAL,
|
||||
}
|
||||
|
||||
re_spec = re.compile(r'^(<|<=||=|==|>=|>|!=|\^|~)(\d.*)$')
|
||||
re_spec = re.compile(r'^(<|<=||=|==|>=|>|!=|\^|~|~=)(\d.*)$')
|
||||
|
||||
def __init__(self, requirement_string):
|
||||
kind, spec = self.parse(requirement_string)
|
||||
|
@ -468,6 +469,12 @@ class SpecItem(object):
|
|||
return self.spec <= version < upper
|
||||
elif self.kind == self.KIND_TILDE:
|
||||
return self.spec <= version < self.spec.next_minor()
|
||||
elif self.kind == self.KIND_COMPATIBLE:
|
||||
if self.spec.patch:
|
||||
upper = self.spec.next_minor()
|
||||
else:
|
||||
upper = self.spec.next_major()
|
||||
return self.spec <= version < upper
|
||||
else: # pragma: no cover
|
||||
raise ValueError('Unexpected match kind: %r' % self.kind)
|
||||
|
||||
|
|
|
@ -514,6 +514,14 @@ class SpecItemTestCase(unittest.TestCase):
|
|||
['0.0.2', '0.0.2-alpha', '0.0.2+abb'],
|
||||
['0.1.0', '0.0.3', '1.0.0'],
|
||||
),
|
||||
'~=1.4.5': (
|
||||
['1.4.5', '1.4.10-alpha', '1.4.10'],
|
||||
['1.3.6', '1.4.4', '1.5.0'],
|
||||
),
|
||||
'~=1.4': (
|
||||
['1.4.0', '1.6.10-alpha', '1.6.10'],
|
||||
['1.3.0', '2.0.0'],
|
||||
),
|
||||
}
|
||||
|
||||
def test_matches(self):
|
||||
|
|
|
@ -31,6 +31,7 @@ class MatchTestCase(unittest.TestCase):
|
|||
'!=0.1.2-rc1.3-14.15+build.2012-01-01.11h34',
|
||||
'^0.1.2',
|
||||
'~0.1.2',
|
||||
'~=0.1.2',
|
||||
]
|
||||
|
||||
matches = {
|
||||
|
@ -113,6 +114,16 @@ class MatchTestCase(unittest.TestCase):
|
|||
'0.1.2+build4.5',
|
||||
'0.1.3-rc1.3',
|
||||
],
|
||||
'~=1.4.5': (
|
||||
'1.4.5',
|
||||
'1.4.10-alpha',
|
||||
'1.4.10',
|
||||
),
|
||||
'~=1.4': [
|
||||
'1.4.0',
|
||||
'1.6.10-alpha',
|
||||
'1.6.10',
|
||||
],
|
||||
}
|
||||
|
||||
def test_invalid(self):
|
||||
|
|
Loading…
Reference in New Issue