[rpm] Handle the tilde separator in versioning

We need correctly handle the tidle separator in RPM versioning [1]:
eg:
   rpmdev-vercmp 1:8.0.0~b3 1:8.0.0
       1:8.0.0~b3 < 1:8.0.0
       1:8.0.1~b3 > 1:8.0.0
       1:8.0.0~b3 < 1:8.0.1~c1
       1:8.0.0~b3 > 1:8.0.0~a1

[1]. http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/

Change-Id: I4a3c867a603a595515e76ee6f4415177a407a0b8
Closes-bug: #1586981
This commit is contained in:
Sergey Kulanov 2016-05-30 12:53:24 +03:00
parent ff85847eca
commit 2bd9a9415d
2 changed files with 18 additions and 0 deletions

View File

@ -110,6 +110,15 @@ class PackageVersion(ComparableObject):
a = la.pop(0)
if lb:
b = lb.pop(0)
# handle the tilde separator, which is ~ = (int) 382
# _order("~") == 382
# if both versions have tilde then let's continue
if a == b == 382:
continue
if a == 382:
return -1
if b == 382:
return 1
if a < b:
return -1
elif a > b:

View File

@ -239,6 +239,9 @@ class TestPackageVersion(base.TestCase):
ver2 = PackageVersion.from_string("13.9-16.12")
ver3 = PackageVersion.from_string("13.9")
ver4 = PackageVersion.from_string("1:13.9")
ver5 = PackageVersion.from_string("1:8.0.0~b3")
ver6 = PackageVersion.from_string("1:8.0.0")
ver7 = PackageVersion.from_string("1:8.0.0~a1")
self.assertLess(ver1, ver2)
self.assertGreater(ver2, ver1)
self.assertEqual(ver1, ver1)
@ -247,3 +250,9 @@ class TestPackageVersion(base.TestCase):
self.assertEqual(ver2, ver3)
self.assertGreater(ver4, ver3)
self.assertGreater(ver4, ver2)
# test tilda in versioning
# rpmdev-vercmp 1:8.0.0~b3 1:8.0.0
# 1:8.0.0~b3 < 1:8.0.0
# 1:8.0.0~b3 > 1:8.0.0~a1
self.assertGreater(ver6, ver5)
self.assertGreater(ver5, ver7)