Skip to content

Commit 08f0fb3

Browse files
committed
fix: workspace member with fixed version key
1 parent d024c22 commit 08f0fb3

2 files changed

Lines changed: 78 additions & 6 deletions

File tree

commitizen/providers/cargo_provider.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,13 @@ def set_lock_version(self, version: str) -> None:
8383
if TYPE_CHECKING:
8484
assert isinstance(package_content, dict)
8585
try:
86-
version_workspace = package_content["version"]["workspace"]
87-
if version_workspace is True:
88-
package_name = package_content["name"]
89-
if TYPE_CHECKING:
90-
assert isinstance(package_name, str)
91-
members_inheriting.append(package_name)
86+
if not isinstance(package_content["version"], str):
87+
version_workspace = package_content["version"]["workspace"]
88+
if version_workspace is True:
89+
package_name = package_content["name"]
90+
if TYPE_CHECKING:
91+
assert isinstance(package_name, str)
92+
members_inheriting.append(package_name)
9293
except NonExistentKey:
9394
pass
9495

tests/providers/test_cargo_provider.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,77 @@ def test_cargo_provider_workspace_member_without_version_key(
378378
assert lock_file.read_text() == dedent(expected_lock_content)
379379

380380

381+
def test_cargo_provider_workspace_member_with_fixed_version_key(
382+
config: BaseConfig,
383+
chdir: Path,
384+
):
385+
"""Test workspace member that has fixed version key (should not crash)."""
386+
workspace_toml = """\
387+
[workspace]
388+
members = ["member_with_fixed_version"]
389+
390+
[workspace.package]
391+
version = "0.1.0"
392+
"""
393+
394+
# Create a member that has fixed version key
395+
member_content = """\
396+
[package]
397+
name = "member_with_fixed_version"
398+
version = "1.0.0"
399+
"""
400+
401+
lock_content = """\
402+
[[package]]
403+
name = "member_with_fixed_version"
404+
version = "1.0.0"
405+
source = "registry+https://github.com/rust-lang/crates.io-index"
406+
checksum = "123abc"
407+
"""
408+
409+
expected_workspace_toml = """\
410+
[workspace]
411+
members = ["member_with_fixed_version"]
412+
413+
[workspace.package]
414+
version = "42.1"
415+
"""
416+
417+
expected_lock_content = """\
418+
[[package]]
419+
name = "member_with_fixed_version"
420+
version = "1.0.0"
421+
source = "registry+https://github.com/rust-lang/crates.io-index"
422+
checksum = "123abc"
423+
"""
424+
425+
# Create the workspace file
426+
filename = CargoProvider.filename
427+
file = chdir / filename
428+
file.write_text(dedent(workspace_toml))
429+
430+
# Create the member directory and file
431+
os.mkdir(chdir / "member_with_fixed_version")
432+
member_file = chdir / "member_with_fixed_version" / "Cargo.toml"
433+
member_file.write_text(dedent(member_content))
434+
435+
# Create the lock file
436+
lock_filename = CargoProvider.lock_filename
437+
lock_file = chdir / lock_filename
438+
lock_file.write_text(dedent(lock_content))
439+
440+
config.settings["version_provider"] = "cargo"
441+
442+
provider = get_provider(config)
443+
assert isinstance(provider, CargoProvider)
444+
assert provider.get_version() == "0.1.0"
445+
446+
# This should not crash even though the member has fixed version key
447+
provider.set_version("42.1")
448+
assert file.read_text() == dedent(expected_workspace_toml)
449+
assert lock_file.read_text() == dedent(expected_lock_content)
450+
451+
381452
def test_cargo_provider_workspace_member_without_workspace_key(
382453
config: BaseConfig,
383454
chdir: Path,

0 commit comments

Comments
 (0)