From ded9fef36f42ce5bc1159540cfe731d50968205e Mon Sep 17 00:00:00 2001 From: Santiago Fraire Date: Sat, 3 Jun 2023 13:49:45 +0200 Subject: [PATCH] feat: add support for cargo workspaces --- commitizen/providers.py | 13 ++++++++++++- tests/test_version_providers.py | 34 +++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/commitizen/providers.py b/commitizen/providers.py index 17b99e7b23..f1e80d3645 100644 --- a/commitizen/providers.py +++ b/commitizen/providers.py @@ -115,14 +115,25 @@ def set(self, pyproject: tomlkit.TOMLDocument, version: str): class CargoProvider(TomlProvider): """ Cargo version management + + With support for `workspaces` """ filename = "Cargo.toml" def get(self, document: tomlkit.TOMLDocument) -> str: - return document["package"]["version"] # type: ignore + try: + return document["package"]["version"] # type: ignore + except tomlkit.exceptions.NonExistentKey: + ... + return document["workspace"]["package"]["version"] # type: ignore def set(self, document: tomlkit.TOMLDocument, version: str): + try: + document["workspace"]["package"]["version"] = version # type: ignore + return + except tomlkit.exceptions.NonExistentKey: + ... document["package"]["version"] = version # type: ignore diff --git a/tests/test_version_providers.py b/tests/test_version_providers.py index 1c48fc3603..74169355e2 100644 --- a/tests/test_version_providers.py +++ b/tests/test_version_providers.py @@ -57,8 +57,9 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): mock.assert_called_once_with("version", "43.1") -FILE_PROVIDERS = dict( - pep621=( +FILE_PROVIDERS = [ + ( + "pep621", "pyproject.toml", Pep621Provider, """\ @@ -70,7 +71,8 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): version = "42.1" """, ), - poetry=( + ( + "poetry", "pyproject.toml", PoetryProvider, """\ @@ -82,7 +84,21 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): version = "42.1" """, ), - cargo=( + ( + "cargo", + "Cargo.toml", + CargoProvider, + """\ + [workspace.package] + version = "0.1.0" + """, + """\ + [workspace.package] + version = "42.1" + """, + ), + ( + "cargo", "Cargo.toml", CargoProvider, """\ @@ -94,7 +110,8 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): version = "42.1" """, ), - npm=( + ( + "npm", "package.json", NpmProvider, """\ @@ -110,7 +127,8 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): } """, ), - composer=( + ( + "composer", "composer.json", ComposerProvider, """\ @@ -126,12 +144,12 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): } """, ), -) +] @pytest.mark.parametrize( "id,filename,cls,content,expected", - (pytest.param(id, *FILE_PROVIDERS[id], id=id) for id in FILE_PROVIDERS), + FILE_PROVIDERS, ) def test_file_providers( config: BaseConfig,