diff mbox series

oeqa/selftest/prservice: support non integer PR values

Message ID 20240409132509.2854242-1-michael.opdenacker@bootlin.com
State New
Headers show
Series oeqa/selftest/prservice: support non integer PR values | expand

Commit Message

Michael Opdenacker April 9, 2024, 1:25 p.m. UTC
From: Michael Opdenacker <michael.opdenacker@bootlin.com>

Support non integer x.y.z PR values, for when the PR server
supports upstream PR servers.

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>

---

Note that regular integer PR values are still supported.
This code has also been tested on master, without the proposed
PR server changes.
---
 meta/classes/primport.bbclass             |  2 +-
 meta/lib/oe/prservice.py                  | 17 ++++++++++++-----
 meta/lib/oeqa/selftest/cases/prservice.py |  9 +++++++--
 3 files changed, 20 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/meta/classes/primport.bbclass b/meta/classes/primport.bbclass
index 00924174c1..1ff09c8785 100644
--- a/meta/classes/primport.bbclass
+++ b/meta/classes/primport.bbclass
@@ -17,7 +17,7 @@  python primport_handler () {
             bb.fatal("import failed!")
 
         for (version, pkgarch, checksum, value) in imported:
-            bb.note("imported (%s,%s,%s,%d)" % (version, pkgarch, checksum, value))
+            bb.note("imported (%s,%s,%s,%s)" % (version, pkgarch, checksum, value))
     elif isinstance(e, bb.event.ParseStarted):
         import oe.prservice
         oe.prservice.prserv_check_avail(e.data)
diff --git a/meta/lib/oe/prservice.py b/meta/lib/oe/prservice.py
index c41242c878..d7920fc511 100644
--- a/meta/lib/oe/prservice.py
+++ b/meta/lib/oe/prservice.py
@@ -4,6 +4,12 @@ 
 # SPDX-License-Identifier: GPL-2.0-only
 #
 
+import re
+
+def is_legal_prvalue(str):
+    pattern = r'^[0-9]+([.][0-9]+)*$'
+    return bool(re.match(pattern, str))
+
 def prserv_make_conn(d, check = False):
     import prserv.serv
     host_params = list([_f for _f in (d.getVar("PRSERV_HOST") or '').split(':') if _f])
@@ -59,14 +65,15 @@  def prserv_import_db(d, filter_version=None, filter_pkgarch=None, filter_checksu
                (filter_pkgarch and filter_pkgarch != pkgarch) or \
                (filter_checksum and filter_checksum != checksum):
                continue
-            try:
-                value = int(d.getVar(remain + '$' + version + '$' + pkgarch + '$' + checksum))
-            except BaseException as exc:
+
+            value = d.getVar(remain + '$' + version + '$' + pkgarch + '$' + checksum)
+            if not is_legal_prvalue(value):
                 bb.debug("Not valid value of %s:%s" % (v,str(exc)))
                 continue
-            ret = conn.importone(version,pkgarch,checksum,value)
+
+            ret = str(conn.importone(version, pkgarch, checksum, value))
             if ret != value:
-                bb.error("importing(%s,%s,%s,%d) failed. DB may have larger value %d" % (version,pkgarch,checksum,value,ret))
+                bb.error("importing(%s,%s,%s,%s) failed. DB may have larger value %s" % (version,pkgarch,checksum,value,ret))
             else:
                imported.append((version,pkgarch,checksum,value))
     conn.close()
diff --git a/meta/lib/oeqa/selftest/cases/prservice.py b/meta/lib/oeqa/selftest/cases/prservice.py
index 8da3739c57..0e2ca0c5ab 100644
--- a/meta/lib/oeqa/selftest/cases/prservice.py
+++ b/meta/lib/oeqa/selftest/cases/prservice.py
@@ -16,6 +16,11 @@  from oeqa.utils.network import get_free_port
 
 import bb.utils
 
+def rev_minor(rev):
+    """Returns the last number of an x.y.z revision number"""
+    fields=str(rev).split('.')
+    return int(fields[-1])
+
 class BitbakePrTests(OESelftestTestCase):
 
     @classmethod
@@ -78,7 +83,7 @@  class BitbakePrTests(OESelftestTestCase):
         pr_2 = self.get_pr_version(package_name)
         stamp_2 = self.get_task_stamp(package_name, track_task)
 
-        self.assertTrue(pr_2 - pr_1 == 1, "New PR %s did not increment as expected (from %s), difference should be 1" % (pr_2, pr_1))
+        self.assertTrue(rev_minor(pr_2) - rev_minor(pr_1) == 1, "New PR %s did not increment as expected (from %s), difference should be 1" % (pr_2, pr_1))
         self.assertTrue(stamp_1 != stamp_2, "Different pkg rev. but same stamp: %s" % stamp_1)
 
         self.cleanup()
@@ -104,7 +109,7 @@  class BitbakePrTests(OESelftestTestCase):
         self.increment_package_pr(package_name)
         pr_2 = self.get_pr_version(package_name)
 
-        self.assertTrue(pr_2 - pr_1 == 1, "New PR %s did not increment as expected (from %s), difference should be 1" % (pr_2, pr_1))
+        self.assertTrue(rev_minor(pr_2) - rev_minor(pr_1) == 1, "New PR %s did not increment as expected (from %s), difference should be 1" % (pr_2, pr_1))
 
         self.cleanup()