summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Skyttä <ville.skytta@iki.fi>2011-04-04 00:04:43 +0300
committerTill Maas <opensource@till.name>2011-04-14 17:23:10 +0200
commit3d6841fba40388746a394053a50bd7938527e721 (patch)
tree1dad02beac248747c5a0dfa5a067107a6ae63e68
parent44d12d00649792a4d5da6c425bf3cb7c3fceb3f9 (diff)
downloadcnucnu-3d6841fba40388746a394053a50bd7938527e721.tar.gz
cnucnu-3d6841fba40388746a394053a50bd7938527e721.tar.xz
cnucnu-3d6841fba40388746a394053a50bd7938527e721.zip
Implement multi-digit RC, and "rc" vs "pre" comparison.
-rw-r--r--cnucnu/helper.py70
-rwxr-xr-xcnucnu/tests/helper_test.py30
2 files changed, 62 insertions, 38 deletions
diff --git a/cnucnu/helper.py b/cnucnu/helper.py
index 295a590..5301c84 100644
--- a/cnucnu/helper.py
+++ b/cnucnu/helper.py
@@ -146,54 +146,70 @@ def upstream_cmp(v1, v2):
"""
- v1, rc1 = split_rc(v1)
- v2, rc2 = split_rc(v2)
+ v1, rc1, rcn1 = split_rc(v1)
+ v2, rc2, rcn2 = split_rc(v2)
diff = rpm_cmp(v1, v2)
- # base versions are the same, check for rc-status
- if diff == 0:
+ if diff != 0:
+ # base versions are different, ignore rc-status
+ return diff
+
+ if rc1 and rc2:
# both are rc, higher rc is newer
- if rc1 and rc2:
- return cmp(rc1.lower(), rc2.lower())
- # only first is rc, then second is newer
- elif rc1:
+ diff = cmp(rc1.lower(), rc2.lower())
+ if diff != 0:
+ # rc is newer than pre etc
+ return diff
+ if rcn1 and rcn2:
+ # both have rc number
+ return cmp(int(rcn1), int(rcn2))
+ if rcn1:
+ # only first has rc number, then it is newer
+ return 1
+ if rcn2:
+ # only second has rc number, then it is newer
return -1
+ # both rc numbers are missing or same
+ return 0
+
+ if rc1:
+ # only first is rc, then second is newer
+ return -1
+ if rc2:
# only second is rc, then first is newer
- elif rc2:
- return 1
- # none is rc, both are the same
- else:
- return 0
- # base versions are different, ignore rc-status
- else:
- return diff
+ return 1
+
+ # neither is a rc
+ return 0
+
-__rc_ups_regex = re.compile("([^-rp]*)(-?((rc|pre)[0-9]?))?", re.I)
-__rc_rel_regex = re.compile(r'0\.[0-9]*\.((rc|pre)[0-9])', re.I)
+__rc_ups_regex = re.compile("(.*?)(-?(rc|pre)([0-9]*))", re.I)
+__rc_rel_regex = re.compile(r'0\.[0-9]+\.(rc|pre)([0-9]*)', re.I)
def split_rc(version):
- """ Split version into version and release candidate string if possible
+ """ Split version into version and release candidate string +
+ release candidate number if possible
"""
match = __rc_ups_regex.match(version)
+ if not match:
+ return (version, "", "")
- v = match.groups()[0]
- rc = match.groups()[2]
+ rc = match.group(3)
if rc:
- return (v, rc)
+ return (match.group(1), rc, match.group(4))
else:
# if version contains a dash, but no release candidate string is found, v != version, therefore use version here
# Example version: 1.8.23-20100128-r1100
# Then: v=1.8.23, but rc=""
- return (version, "")
+ return (version, "", "")
def get_rc(release):
match = __rc_rel_regex.match(release)
if match:
- rc = match.groups()[0]
- return rc
+ return (match.group(1), match.group(2))
else:
- return ""
+ return ("", "")
def upstream_max(list):
list.sort(cmp=upstream_cmp)
@@ -202,7 +218,7 @@ def upstream_max(list):
def cmp_upstream_repo(upstream_v, repo_vr):
repo_rc = get_rc(repo_vr[1])
- repo_version = "%s%s" % (repo_vr[0], repo_rc)
+ repo_version = "%s%s%s" % (repo_vr[0], repo_rc[0], repo_rc[1])
return upstream_cmp(upstream_v, repo_version)
diff --git a/cnucnu/tests/helper_test.py b/cnucnu/tests/helper_test.py
index 326153a..4b8aa68 100755
--- a/cnucnu/tests/helper_test.py
+++ b/cnucnu/tests/helper_test.py
@@ -35,15 +35,15 @@ class HelperTest(unittest.TestCase):
self.assertEqual(upstream_cmp("0", "1"), -1)
def test_split_rc(self):
- self.assertEqual(split_rc("4.0.0-rc1"), ("4.0.0", "rc1"))
- self.assertEqual(split_rc("4.0.0-pre2"), ("4.0.0", "pre2"))
- self.assertEqual(split_rc("4.0.0"), ("4.0.0", ""))
- self.assertEqual(split_rc("0"), ("0", ""))
- self.assertEqual(split_rc("1"), ("1", ""))
- self.assertEqual(split_rc("1.2pre"), ("1.2", "pre"))
- self.assertEqual(split_rc("4.0.0RC1"), ("4.0.0", "RC1"))
- self.assertEqual(split_rc("4.0.0-PRE2"), ("4.0.0", "PRE2"))
- self.assertEqual(split_rc("4.0.0rc1"), ("4.0.0", "rc1"))
+ self.assertEqual(split_rc("4.0.0-rc1"), ("4.0.0", "rc", "1"))
+ self.assertEqual(split_rc("4.0.0-pre2"), ("4.0.0", "pre", "2"))
+ self.assertEqual(split_rc("4.0.0"), ("4.0.0", "", ""))
+ self.assertEqual(split_rc("0"), ("0", "", ""))
+ self.assertEqual(split_rc("1"), ("1", "", ""))
+ self.assertEqual(split_rc("1.2pre"), ("1.2", "pre", ""))
+ self.assertEqual(split_rc("4.0.0RC1"), ("4.0.0", "RC", "1"))
+ self.assertEqual(split_rc("4.0.0-PRE2"), ("4.0.0", "PRE", "2"))
+ self.assertEqual(split_rc("4.0.0rc1"), ("4.0.0", "rc", "1"))
def test_upstream_cmp_rc(self):
self.assertEqual(upstream_cmp("4.0.0", "4.0.0"), 0)
@@ -63,6 +63,8 @@ class HelperTest(unittest.TestCase):
self.assertEqual(upstream_cmp("4.0.0", "4.0.0-rc2"), 1)
self.assertEqual(upstream_cmp("1.0.0rc3", "1.0.0RC3"), 0)
self.assertEqual(upstream_cmp("1.0.0", "1.0.0-rc1"), 1)
+ self.assertEqual(upstream_cmp("1.0.0rc3", "1.0.0-RC21"), -1)
+ self.assertEqual(upstream_cmp("1.0.0rc10", "1.0.0-rc0010"), 0)
def test_upstream_cmp_pre(self):
self.assertEqual(upstream_cmp("4.0.0", "4.0.0"), 0)
@@ -80,6 +82,8 @@ class HelperTest(unittest.TestCase):
self.assertEqual(upstream_cmp("1.0.0", "1.0.0-pre1"), 1)
self.assertEqual(upstream_cmp("1.0.0PRE1", "1.0.0pre1"), 0)
+ self.assertEqual(upstream_cmp("1.0.0pre15", "1.0.0pre2"), 1)
+ self.assertEqual(upstream_cmp("1.0pre5", "1.0pre05"), 0)
def test_upstream_max_rc(self):
versions = ["4.0.1", "4.0.0", "4.0.0-rc2", "4.0.0rc1"]
@@ -99,6 +103,9 @@ class HelperTest(unittest.TestCase):
self.test_upstream_max_sorted(["1.2.1", "1.2b", "1.2a", "1.2", "1.2pre"])
self.test_upstream_max_sorted(["1.3", "1.2"])
+ def test_upstream_max_allrc(self):
+ self.test_upstream_max_sorted(["1.0.1pre0", "1.0", "1.0-rc11", "1.0RC3", "1.0RC", "1.0-PRE10", "1.0pre1", "1.0pre0", "1.0pre"])
+
# def test_perl_versioning(self):
# """ 1.20 is newer than 1.902 """
# self.test_upstream_max_sorted(["1.20", "1.902", "1.901", "1.18"])
@@ -108,8 +115,9 @@ class HelperTest(unittest.TestCase):
# self.test_upstream_max_sorted(["1.2", "1.2a", "1.2b", "1.1"])
def test_get_rc(self):
- self.assertEqual(get_rc("0.4.pre2.fc11"), "pre2")
- self.assertEqual(get_rc("0.4.RC1.fc15"), "RC1")
+ self.assertEqual(get_rc("0.4.pre2.fc11"), ("pre", "2"))
+ self.assertEqual(get_rc("0.4.RC1.fc15"), ("RC", "1"))
+ self.assertEqual(get_rc("0.11.rc15.el5"), ("rc", "15"))
def test_cmp_upstream_repo(self):
self.assertEqual(cmp_upstream_repo("0.1.0", ("0.1.0", "5.fc10")), 0)