diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9ff73d544..fed5bc709 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -56,7 +56,7 @@ repos: - tomli - repo: https://github.com/commitizen-tools/commitizen - rev: v4.13.1 # automatically updated by Commitizen + rev: v4.13.3 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 15d690d15..8659d787b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +## v4.13.3 (2026-02-04) + +### Refactor + +- **version_schemes**: shorten generate_prerelease (#1838) + +## v4.13.2 (2026-02-03) + +### Refactor + +- simplify code with pathlib Path object (#1840) +- **tags**: extract version resolution method (#1839) + ## v4.13.1 (2026-02-03) ### Refactor diff --git a/commitizen/__version__.py b/commitizen/__version__.py index ab9d6f875..fd447e0fb 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "4.13.1" +__version__ = "4.13.3" diff --git a/commitizen/version_schemes.py b/commitizen/version_schemes.py index c03d908aa..1f17e9087 100644 --- a/commitizen/version_schemes.py +++ b/commitizen/version_schemes.py @@ -185,15 +185,10 @@ def generate_prerelease( # https://semver.org/#spec-item-11 if self.is_prerelease and self.pre: prerelease = max(prerelease, self.pre[0]) + if prerelease.startswith(self.pre[0]): + offset = self.pre[1] + 1 - # version.pre is needed for mypy check - if self.is_prerelease and self.pre and prerelease.startswith(self.pre[0]): - prev_prerelease: int = self.pre[1] - new_prerelease_number = prev_prerelease + 1 - else: - new_prerelease_number = offset - pre_version = f"{prerelease}{new_prerelease_number}" - return pre_version + return f"{prerelease}{offset}" def generate_devrelease(self, devrelease: int | None) -> str: """Generate devrelease diff --git a/pyproject.toml b/pyproject.toml index 4a2b3850d..e174a2c38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commitizen" -version = "4.13.1" +version = "4.13.3" description = "Python commitizen client tool" authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }] maintainers = [ diff --git a/tests/test_cmd.py b/tests/test_cmd.py index e8a869e01..77a67cf4e 100644 --- a/tests/test_cmd.py +++ b/tests/test_cmd.py @@ -5,15 +5,18 @@ # https://docs.python.org/3/howto/unicode.html -def test_valid_utf8_encoded_strings(): - valid_strings = ( +@pytest.mark.parametrize( + "s", + [ "", "ascii", "🤦🏻‍♂️", "﷽", "\u0000", - ) - assert all(s == cmd._try_decode(s.encode("utf-8")) for s in valid_strings) + ], +) +def test_valid_utf8_encoded_strings(s: str): + assert s == cmd._try_decode(s.encode("utf-8")) # A word of caution: just because an encoding can be guessed for a given @@ -22,24 +25,25 @@ def test_valid_utf8_encoded_strings(): # https://docs.python.org/3/library/codecs.html#standard-encodings -# Pick a random, non-utf8 encoding to test. -def test_valid_cp1250_encoded_strings(): - valid_strings = ( +@pytest.mark.parametrize( + "s", + [ "", "ascii", "äöüß", "ça va", "jak se máte", - ) - for s in valid_strings: - assert cmd._try_decode(s.encode("cp1250")) or True + ], +) +def test_valid_cp1250_encoded_strings(s: str): + """Pick a random, non-utf8 encoding to test.""" + # We just want to make sure it doesn't raise an exception + cmd._try_decode(s.encode("cp1250")) def test_invalid_bytes(): - invalid_bytes = (b"\x73\xe2\x9d\xff\x00",) - for s in invalid_bytes: - with pytest.raises(CharacterSetDecodeError): - cmd._try_decode(s) + with pytest.raises(CharacterSetDecodeError): + cmd._try_decode(b"\x73\xe2\x9d\xff\x00") def test_always_fail_decode(): diff --git a/uv.lock b/uv.lock index e1482cb2d..872ddd00f 100644 --- a/uv.lock +++ b/uv.lock @@ -195,7 +195,7 @@ wheels = [ [[package]] name = "commitizen" -version = "4.13.1" +version = "4.13.3" source = { editable = "." } dependencies = [ { name = "argcomplete" },