1
0
Fork 0

Adding upstream version 4.7.0.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-05-12 06:45:31 +02:00
parent bdd390b4cf
commit 9277c2e8ea
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
7 changed files with 115 additions and 9 deletions

View file

@ -48,7 +48,7 @@ repos:
- tomli
- repo: https://github.com/commitizen-tools/commitizen
rev: v4.6.3 # automatically updated by Commitizen
rev: v4.7.0 # automatically updated by Commitizen
hooks:
- id: commitizen
- id: commitizen-branch

View file

@ -1,3 +1,13 @@
## v4.7.0 (2025-05-10)
### Feat
- **providers**: add support for `Cargo.lock`
### Refactor
- **tests**: increase verbosity of variables
## v4.6.3 (2025-05-07)
### Fix

View file

@ -1 +1 @@
__version__ = "4.6.3"
__version__ = "4.7.0"

View file

@ -1,5 +1,7 @@
from __future__ import annotations
from pathlib import Path
import tomlkit
from commitizen.providers.base_provider import TomlProvider
@ -13,6 +15,11 @@ class CargoProvider(TomlProvider):
"""
filename = "Cargo.toml"
lock_filename = "Cargo.lock"
@property
def lock_file(self) -> Path:
return Path() / self.lock_filename
def get(self, document: tomlkit.TOMLDocument) -> str:
try:
@ -28,3 +35,23 @@ class CargoProvider(TomlProvider):
except tomlkit.exceptions.NonExistentKey:
...
document["package"]["version"] = version # type: ignore
def set_version(self, version: str) -> None:
super().set_version(version)
if self.lock_file.exists():
self.set_lock_version(version)
def set_lock_version(self, version: str) -> None:
cargo_toml_content = tomlkit.parse(self.file.read_text())
try:
package_name = cargo_toml_content["package"]["name"] # type: ignore
except tomlkit.exceptions.NonExistentKey:
package_name = cargo_toml_content["workspace"]["package"]["name"] # type: ignore
cargo_lock_content = tomlkit.parse(self.lock_file.read_text())
packages: tomlkit.items.AoT = cargo_lock_content["package"] # type: ignore[assignment]
for i, package in enumerate(packages):
if package["name"] == package_name:
cargo_lock_content["package"][i]["version"] = version # type: ignore[index]
break
self.lock_file.write_text(tomlkit.dumps(cargo_lock_content))

View file

@ -353,7 +353,7 @@ Commitizen provides some version providers for some well known formats:
| `pep621` | Get and set version from `pyproject.toml` `project.version` field |
| `poetry` | Get and set version from `pyproject.toml` `tool.poetry.version` field |
| `uv` | Get and set version from `pyproject.toml` `project.version` field and `uv.lock` `package.version` field whose `package.name` field is the same as `pyproject.toml` `project.name` field |
| `cargo` | Get and set version from `Cargo.toml` `project.version` field |
| `cargo` | Get and set version from `Cargo.toml` `package.version` field and `Cargo.lock` `package.version` field whose `package.name` field is the same as `Cargo.toml` `package.name` field |
| `npm` | Get and set version from `package.json` `version` field, `package-lock.json` `version,packages.''.version` fields if the file exists, and `npm-shrinkwrap.json` `version,packages.''.version` fields if the file exists |
| `composer` | Get and set version from `composer.json` `project.version` field |

View file

@ -1,6 +1,6 @@
[project]
name = "commitizen"
version = "4.6.3"
version = "4.7.0"
description = "Python commitizen client tool"
authors = [{ name = "Santiago Fraire", email = "santiwilly@gmail.com" }]
maintainers = [
@ -88,7 +88,7 @@ build-backend = "poetry.core.masonry.api"
[tool.commitizen]
version = "4.6.3"
version = "4.7.0"
tag_format = "v$version"
version_files = [
"pyproject.toml:version",

View file

@ -15,7 +15,7 @@ name = "whatever"
version = "0.1.0"
"""
CARGO_EXPECTED = """\
CARGO_TOML_EXPECTED = """\
[package]
name = "whatever"
version = "42.1"
@ -27,18 +27,44 @@ name = "whatever"
version = "0.1.0"
"""
CARGO_WORKSPACE_EXPECTED = """\
CARGO_WORKSPACE_TOML_EXPECTED = """\
[workspace.package]
name = "whatever"
version = "42.1"
"""
CARGO_LOCK = """\
[[package]]
name = "whatever"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "123abc"
dependencies = [
"packageA",
"packageB",
"packageC",
]
"""
CARGO_LOCK_EXPECTED = """\
[[package]]
name = "whatever"
version = "42.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "123abc"
dependencies = [
"packageA",
"packageB",
"packageC",
]
"""
@pytest.mark.parametrize(
"content, expected",
(
(CARGO_TOML, CARGO_EXPECTED),
(CARGO_WORKSPACE_TOML, CARGO_WORKSPACE_EXPECTED),
(CARGO_TOML, CARGO_TOML_EXPECTED),
(CARGO_WORKSPACE_TOML, CARGO_WORKSPACE_TOML_EXPECTED),
),
)
def test_cargo_provider(
@ -58,3 +84,46 @@ def test_cargo_provider(
provider.set_version("42.1")
assert file.read_text() == dedent(expected)
@pytest.mark.parametrize(
"toml_content, lock_content, toml_expected, lock_expected",
(
(
CARGO_TOML,
CARGO_LOCK,
CARGO_TOML_EXPECTED,
CARGO_LOCK_EXPECTED,
),
(
CARGO_WORKSPACE_TOML,
CARGO_LOCK,
CARGO_WORKSPACE_TOML_EXPECTED,
CARGO_LOCK_EXPECTED,
),
),
)
def test_cargo_provider_with_lock(
config: BaseConfig,
chdir: Path,
toml_content: str,
lock_content: str,
toml_expected: str,
lock_expected: str,
):
filename = CargoProvider.filename
file = chdir / filename
file.write_text(dedent(toml_content))
lock_filename = CargoProvider.lock_filename
lock_file = chdir / lock_filename
lock_file.write_text(dedent(lock_content))
config.settings["version_provider"] = "cargo"
provider = get_provider(config)
assert isinstance(provider, CargoProvider)
assert provider.get_version() == "0.1.0"
provider.set_version("42.1")
assert file.read_text() == dedent(toml_expected)
assert lock_file.read_text() == dedent(lock_expected)