diff --git a/src/univers/gentoo.py b/src/univers/gentoo.py index 543f8548..43a3eb17 100644 --- a/src/univers/gentoo.py +++ b/src/univers/gentoo.py @@ -181,3 +181,27 @@ def vercmp(ver1, ver2): # Our versions had different strings but ended up being equal. # The revision holds the final difference. return cmp(rev1, rev2) + + +def bump(ver): + """ + Return a new version where the next to the last revision number + is one greater (e.g., 5.3.1 => 5.4) i.e., incrementing this GentooVersion + last numeric segment. + """ + + if not ver: + return None + + ver = remove_spaces(ver) + version, _ = parse_version_and_revision(ver) + + segments = version.split(".") + segments = [int(re.sub(r"\D", "", seg)) for seg in segments if seg] + + if len(segments) > 1: + segments.pop() + + segments[-1] += 1 + segments = [str(r) for r in segments] + return ".".join(segments) diff --git a/src/univers/versions.py b/src/univers/versions.py index 5d6101ac..52e9325e 100644 --- a/src/univers/versions.py +++ b/src/univers/versions.py @@ -429,6 +429,9 @@ def __gt__(self, other): return NotImplemented return gentoo.vercmp(self.value, other.value) == 1 + def bump(self): + return gentoo.bump(self.value) + class AlpineLinuxVersion(GentooVersion): @classmethod diff --git a/tests/test_gentoo.py b/tests/test_gentoo.py index d2eddd5e..554ab0ba 100644 --- a/tests/test_gentoo.py +++ b/tests/test_gentoo.py @@ -31,3 +31,12 @@ def comparison(self): def test_gentoo_vers_cmp(test_case): avc = GentooVersionComp.from_data(data=test_case) avc.assert_result() + + +def test_gentoo_bump(): + assert GentooVersion("2.23.3").bump() == "2.24" + assert GentooVersion("2.24.3").bump() == "2.25" + assert GentooVersion("2.25.4").bump() == "2.26" + assert GentooVersion("1.3.8b").bump() == "1.4" + assert GentooVersion("9.9_p2").bump() == "10" + assert GentooVersion("0.13.4-r2").bump() == "0.14"