Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2cd0f88

Browse files
bearomorphismLee-W
authored andcommitted
fix(Init): fix a typo in _ask_version_provider options and remove unnecessary filter, use named tuple for options
1 parent 2631253 commit 2cd0f88

File tree

1 file changed

+70
-35
lines changed

1 file changed

+70
-35
lines changed

‎commitizen/commands/init.py

Lines changed: 70 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import os
44
import shutil
5-
from typing import Any
5+
from typing import Any, NamedTuple
66

77
import questionary
88
import yaml
@@ -17,6 +17,54 @@
1717
from commitizen.version_schemes import KNOWN_SCHEMES, Version, get_version_scheme
1818

1919

20+
class _VersionProviderOption(NamedTuple):
21+
provider_name: str
22+
description: str
23+
24+
@property
25+
def title(self) -> str:
26+
return f"{self.provider_name}: {self.description}"
27+
28+
29+
_VERSION_PROVIDER_CHOICES = tuple(
30+
questionary.Choice(title=option.title, value=option.provider_name)
31+
for option in (
32+
_VersionProviderOption(
33+
provider_name="commitizen",
34+
description="Fetch and set version in commitizen config (default)",
35+
),
36+
_VersionProviderOption(
37+
provider_name="cargo",
38+
description="Get and set version from Cargo.toml:project.version field",
39+
),
40+
_VersionProviderOption(
41+
provider_name="composer",
42+
description="Get and set version from composer.json:project.version field",
43+
),
44+
_VersionProviderOption(
45+
provider_name="npm",
46+
description="Get and set version from package.json:project.version field",
47+
),
48+
_VersionProviderOption(
49+
provider_name="pep621",
50+
description="Get and set version from pyproject.toml:project.version field",
51+
),
52+
_VersionProviderOption(
53+
provider_name="poetry",
54+
description="Get and set version from pyproject.toml:tool.poetry.version field",
55+
),
56+
_VersionProviderOption(
57+
provider_name="uv",
58+
description="Get and set version from pyproject.toml and uv.lock",
59+
),
60+
_VersionProviderOption(
61+
provider_name="scm",
62+
description="Fetch the version from git and does not need to set it back",
63+
),
64+
)
65+
)
66+
67+
2068
class ProjectInfo:
2169
"""Discover information about the current folder."""
2270

@@ -228,45 +276,32 @@ def _ask_tag_format(self, latest_tag: str) -> str:
228276
def _ask_version_provider(self) -> str:
229277
"""Ask for setting: version_provider"""
230278

231-
OPTS = {
232-
"commitizen": "commitizen: Fetch and set version in commitizen config (default)",
233-
"cargo": "cargo: Get and set version from Cargo.toml:project.version field",
234-
"composer": "composer: Get and set version from composer.json:project.version field",
235-
"npm": "npm: Get and set version from package.json:project.version field",
236-
"pep621": "pep621: Get and set version from pyproject.toml:project.version field",
237-
"poetry": "poetry: Get and set version from pyproject.toml:tool.poetry.version field",
238-
"uv": "uv: Get and set version from pyproject.toml and uv.lock",
239-
"scm": "scm: Fetch the version from git and does not need to set it back",
240-
}
241-
242-
default_val = "commitizen"
243-
if self.project_info.is_python:
244-
if self.project_info.is_python_poetry:
245-
default_val = "poetry"
246-
elif self.project_info.is_python_uv:
247-
default_val = "uv"
248-
else:
249-
default_val = "pep621"
250-
elif self.project_info.is_rust_cargo:
251-
default_val = "cargo"
252-
elif self.project_info.is_npm_package:
253-
default_val = "npm"
254-
elif self.project_info.is_php_composer:
255-
default_val = "composer"
256-
257-
choices = [
258-
questionary.Choice(title=title, value=value)
259-
for value, title in OPTS.items()
260-
]
261-
default = next(filter(lambda x: x.value == default_val, choices))
262279
version_provider: str = questionary.select(
263280
"Choose the source of the version:",
264-
choices=choices,
281+
choices=_VERSION_PROVIDER_CHOICES,
265282
style=self.cz.style,
266-
default=default,
283+
default=self._default_version_provider,
267284
).unsafe_ask()
268285
return version_provider
269286

287+
@property
288+
def _default_version_provider(self) -> str:
289+
if self.project_info.is_python:
290+
if self.project_info.is_python_poetry:
291+
return "poetry"
292+
if self.project_info.is_python_uv:
293+
return "uv"
294+
return "pep621"
295+
296+
if self.project_info.is_rust_cargo:
297+
return "cargo"
298+
if self.project_info.is_npm_package:
299+
return "npm"
300+
if self.project_info.is_php_composer:
301+
return "composer"
302+
303+
return "commitizen"
304+
270305
def _ask_version_scheme(self) -> str:
271306
"""Ask for setting: version_scheme"""
272307
default_scheme = "pep440" if self.project_info.is_python else "semver"
@@ -291,7 +326,7 @@ def _ask_major_version_zero(self, version: Version) -> bool:
291326
return major_version_zero
292327

293328
def _ask_update_changelog_on_bump(self) -> bool:
294-
"Ask for setting: update_changelog_on_bump"
329+
"""Ask for setting: update_changelog_on_bump"""
295330
update_changelog_on_bump: bool = questionary.confirm(
296331
"Create changelog automatically on bump",
297332
default=True,

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /