Made release argment of PackageVersion optional
The reletion may ommit the release component of version, that means any release Aslo the strignify for PackageVersion was changed, now ':' is used to separate epoch Change-Id: I8d74c9cc82720103a5b6d9189f85276bda4ec082
This commit is contained in:
parent
d84ae63612
commit
ee7193c277
|
@ -393,5 +393,5 @@ class RpmRepositoryDriver(RepositoryDriverBase):
|
|||
return PackageVersion(
|
||||
attrs.get("epoch", 0),
|
||||
attrs.get("ver", "0.0"),
|
||||
attrs.get("rel", "0")
|
||||
attrs.get("rel")
|
||||
)
|
||||
|
|
|
@ -24,10 +24,13 @@ class PackageVersion(ComparableObject):
|
|||
|
||||
__slots__ = ["epoch", "version", "release"]
|
||||
|
||||
def __init__(self, epoch, version, release):
|
||||
def __init__(self, epoch, version, release=None):
|
||||
self.epoch = int(epoch or 0)
|
||||
self.version = tuple(version.split('.'))
|
||||
self.release = tuple(release.split('.'))
|
||||
if release:
|
||||
self.release = tuple(release.split('.'))
|
||||
else:
|
||||
self.release = None
|
||||
|
||||
@classmethod
|
||||
def from_string(cls, text):
|
||||
|
@ -35,13 +38,20 @@ class PackageVersion(ComparableObject):
|
|||
|
||||
:param text: the version in format '[{epoch-}]-{version}-{release}'
|
||||
"""
|
||||
components = text.split("-")
|
||||
if len(components) > 2:
|
||||
epoch = components[0]
|
||||
components = components[1:]
|
||||
pos1 = text.find(':')
|
||||
if pos1 != -1:
|
||||
epoch = text[0:pos1]
|
||||
else:
|
||||
epoch = 0
|
||||
return cls(epoch, components[0], components[1])
|
||||
pos1 += 1
|
||||
pos2 = text.find('-', pos1)
|
||||
if pos2 != -1:
|
||||
version = text[pos1: pos2]
|
||||
release = text[pos2 + 1:]
|
||||
else:
|
||||
version = text[pos1:]
|
||||
release = None
|
||||
return cls(epoch, version, release)
|
||||
|
||||
def cmp(self, other):
|
||||
if not isinstance(other, PackageVersion):
|
||||
|
@ -57,7 +67,9 @@ class PackageVersion(ComparableObject):
|
|||
res = self._cmp_version_part(self.version, other.version)
|
||||
if res != 0:
|
||||
return res
|
||||
return self._cmp_version_part(self.release, other.release)
|
||||
if self.release and other.release:
|
||||
return self._cmp_version_part(self.release, other.release)
|
||||
return 0
|
||||
|
||||
def __eq__(self, other):
|
||||
if other is self:
|
||||
|
@ -65,11 +77,17 @@ class PackageVersion(ComparableObject):
|
|||
return self.cmp(other) == 0
|
||||
|
||||
def __str__(self):
|
||||
return "{0}-{1}-{2}".format(
|
||||
self.epoch,
|
||||
".".join(str(x) for x in self.version),
|
||||
".".join(str(x) for x in self.release)
|
||||
)
|
||||
if self.release:
|
||||
return "{0}:{1}-{2}".format(
|
||||
self.epoch,
|
||||
".".join(str(x) for x in self.version),
|
||||
".".join(str(x) for x in self.release)
|
||||
)
|
||||
else:
|
||||
return "{0}:{1}".format(
|
||||
self.epoch,
|
||||
".".join(str(x) for x in self.version),
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def _order(cls, x):
|
||||
|
|
|
@ -224,16 +224,26 @@ class TestPackageVersion(base.TestCase):
|
|||
self.assertEqual(('1', '0'), ver.version)
|
||||
self.assertEqual(('22',), ver.release)
|
||||
|
||||
ver2 = PackageVersion.from_string("1-11.0-2")
|
||||
ver2 = PackageVersion.from_string("1:11.0-2")
|
||||
self.assertEqual(1, ver2.epoch)
|
||||
self.assertEqual(('11', '0'), ver2.version)
|
||||
self.assertEqual(('2',), ver2.release)
|
||||
|
||||
ver3 = PackageVersion.from_string("11.0")
|
||||
self.assertEqual(0, ver3.epoch)
|
||||
self.assertEqual(('11', '0'), ver3.version)
|
||||
self.assertIsNone(ver3.release)
|
||||
|
||||
def test_compare(self):
|
||||
ver1 = PackageVersion.from_string("6.3-31.5")
|
||||
ver2 = PackageVersion.from_string("13.9-16.12")
|
||||
ver3 = PackageVersion.from_string("13.9")
|
||||
ver4 = PackageVersion.from_string("1:13.9")
|
||||
self.assertLess(ver1, ver2)
|
||||
self.assertGreater(ver2, ver1)
|
||||
self.assertEqual(ver1, ver1)
|
||||
self.assertLess(ver1, "6.3-40")
|
||||
self.assertGreater(ver1, "6.3-31.4a")
|
||||
self.assertEqual(ver2, ver3)
|
||||
self.assertGreater(ver4, ver3)
|
||||
self.assertGreater(ver4, ver2)
|
||||
|
|
|
@ -141,7 +141,7 @@ class TestRpmDriver(base.TestCase):
|
|||
"Packages/test1.rpm", package.filename
|
||||
)
|
||||
self.assertItemsEqual(
|
||||
['test2 (= 0-1.1.1.1-1.el7)'],
|
||||
['test2 (= 0:1.1.1.1-1.el7)'],
|
||||
(str(x) for x in package.requires)
|
||||
)
|
||||
self.assertItemsEqual(
|
||||
|
@ -379,13 +379,13 @@ class TestRpmDriver(base.TestCase):
|
|||
)
|
||||
|
||||
self.assertEqual("Test", pkg.name)
|
||||
self.assertEqual("1-1.2.3-1", str(pkg.version))
|
||||
self.assertEqual("1:1.2.3-1", str(pkg.version))
|
||||
self.assertEqual("test.rpm", pkg.filename)
|
||||
self.assertEqual((3, 4, 5), pkg.checksum)
|
||||
self.assertEqual("Group", pkg.group)
|
||||
self.assertEqual(10, pkg.filesize)
|
||||
self.assertItemsEqual(
|
||||
['test1 (= 0-1.2.3-1.el5)'],
|
||||
['test1 (= 0:1.2.3-1.el5)'],
|
||||
(str(x) for x in pkg.requires)
|
||||
)
|
||||
self.assertItemsEqual(
|
||||
|
|
Loading…
Reference in New Issue