aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rumba/irm_backend.py33
1 files changed, 21 insertions, 12 deletions
diff --git a/rumba/irm_backend.py b/rumba/irm_backend.py
index e859e21..9e76158 100644
--- a/rumba/irm_backend.py
+++ b/rumba/irm_backend.py
@@ -235,23 +235,32 @@ class IrmPython(IrmBackend):
def _check_version():
"""Verify PyOuroboros is on the same patch level as Rumba.
- Uses PEP 440 ordering so that dev/pre-release versions sort
- correctly: tag 0.23.0 accepts 0.23.1.dev0 (setuptools_scm's
- representation of the first commit after 0.23.0) because
- 0.23.0 <= 0.23.1.dev0 < 0.23.1 in PEP 440.
+ Both versions may be at the tag (e.g. 0.23.0) or past it
+ (e.g. 0.23.1.dev0+g…, setuptools_scm's representation of
+ the first commit after 0.23.0). We recover the tag by
+ subtracting one from the patch for dev releases, then check
+ that both resolve to the same tag.
"""
import importlib.metadata
from rumba._version import version as rumba_ver
- pyouro_ver = Version(importlib.metadata.version("PyOuroboros"))
- floor = Version(rumba_ver)
- parts = [int(x) for x in rumba_ver.split(".")[:3]]
- parts[2] += 1
- ceiling = Version(".".join(str(x) for x in parts))
- if pyouro_ver < floor or pyouro_ver >= ceiling:
+ def _tag(ver_str):
+ v = Version(ver_str)
+ major, minor = v.release[0], v.release[1] if len(v.release) > 1 else 0
+ patch = v.release[2] if len(v.release) > 2 else 0
+ if v.is_devrelease:
+ patch -= 1
+ return "%d.%d.%d" % (major, minor, patch)
+
+ rumba_tag = _tag(rumba_ver)
+ pyouro_ver = importlib.metadata.version("PyOuroboros")
+ pyouro_tag = _tag(pyouro_ver)
+ if pyouro_tag != rumba_tag:
raise RuntimeError(
- "PyOuroboros >= %s, < %s required (lockstep with Rumba), "
- "got %s" % (floor, ceiling, pyouro_ver)
+ "PyOuroboros tag %s != Rumba tag %s "
+ "(lockstep required); raw versions: "
+ "pyouroboros=%s rumba=%s"
+ % (pyouro_tag, rumba_tag, pyouro_ver, rumba_ver)
)
def _get_ipcp_type(self, layer_type):