"""Version comparison for I2P router updates. Handles semver-like version strings (e.g. "0.9.62", "2.4.0"). Ported from net.i2p.CoreVersion. """ from __future__ import annotations from dataclasses import dataclass @dataclass class Version: """Parsed version number.""" major: int minor: int patch: int def __init__(self, version_str: str) -> None: parts = version_str.strip().split(".") self.major = int(parts[0]) if len(parts) > 0 else 0 self.minor = int(parts[1]) if len(parts) > 1 else 0 self.patch = int(parts[2]) if len(parts) > 2 else 0 def __str__(self) -> str: return f"{self.major}.{self.minor}.{self.patch}" def as_tuple(self) -> tuple[int, int, int]: return (self.major, self.minor, self.patch) def compare_versions(a: str, b: str) -> int: """Compare two version strings. Returns: > 0 if a is newer than b 0 if equal < 0 if a is older than b """ va = Version(a).as_tuple() vb = Version(b).as_tuple() if va > vb: return 1 elif va < vb: return -1 return 0