"""Semantic version comparison. Ported from net.i2p.util.VersionComparator. """ from __future__ import annotations import re def compare_versions(v1: str, v2: str) -> int: """Compare two version strings numerically. Returns -1 if v1 < v2, 0 if equal, 1 if v1 > v2. Handles versions like "0.9.50", "0.9.50-1", "2.3.0". """ parts1 = [int(x) for x in re.split(r"[.\-]", v1)] parts2 = [int(x) for x in re.split(r"[.\-]", v2)] # Pad shorter list with zeros max_len = max(len(parts1), len(parts2)) parts1.extend([0] * (max_len - len(parts1))) parts2.extend([0] * (max_len - len(parts2))) for a, b in zip(parts1, parts2): if a < b: return -1 if a > b: return 1 return 0