diff options
| -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): |
