diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2026-03-21 19:56:18 +0100 |
|---|---|---|
| committer | Dimitri Staessens <dimitri@ouroboros.rocks> | 2026-03-21 20:00:20 +0100 |
| commit | cb2d33f17a725bb908834bb0f3a4f4fd344efc54 (patch) | |
| tree | d4cc70e090b8f088bbbf97d844d17bfb593eabba | |
| parent | fb667c406053a2121d8d1f16099a8063292b3f45 (diff) | |
| download | rumba-cb2d33f17a725bb908834bb0f3a4f4fd344efc54.tar.gz rumba-cb2d33f17a725bb908834bb0f3a4f4fd344efc54.zip | |
Fix check_version() to use tag-level comparison instead of a
patch-range check, making it robust for dev/pre-release versions on
both rumba and PyOuroboros.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
| -rw-r--r-- | rumba/irm_backend.py | 33 |
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): |
