Skip to content

Commit 36b2882

Browse files
refactor(tags): extract version resolution method (#1839)
1 parent 9783d97 commit 36b2882

File tree

1 file changed

+22
-25
lines changed

1 file changed

+22
-25
lines changed

commitizen/tags.py

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -154,24 +154,13 @@ def extract_version(self, tag: GitTag) -> Version:
154154
candidates = (
155155
m for regex in self.version_regexes if (m := regex.fullmatch(tag.name))
156156
)
157-
if not (m := next(candidates, None)):
157+
if not (match := next(candidates, None)):
158158
raise InvalidVersion(self._version_tag_error(tag.name))
159-
if "version" in m.groupdict():
160-
return self.scheme(m.group("version"))
161159

162-
parts = m.groupdict()
163-
version = parts["major"]
160+
if version := match.groupdict().get("version"):
161+
return self.scheme(version)
164162

165-
if minor := parts.get("minor"):
166-
version = f"{version}.{minor}"
167-
if patch := parts.get("patch"):
168-
version = f"{version}.{patch}"
169-
170-
if parts.get("prerelease"):
171-
version = f"{version}-{parts['prerelease']}"
172-
if parts.get("devrelease"):
173-
version = f"{version}{parts['devrelease']}"
174-
return self.scheme(version)
163+
return self.scheme(self._extract_version(match))
175164

176165
def include_in_changelog(self, tag: GitTag) -> bool:
177166
"""Check if a tag should be included in the changelog"""
@@ -195,19 +184,14 @@ def search_version(self, text: str, last: bool = False) -> VersionTag | None:
195184

196185
match = matches[-1 if last else 0]
197186

198-
if "version" in match.groupdict():
199-
return VersionTag(match.group("version"), match.group(0))
187+
groups = match.groupdict()
188+
if version := groups.get("version"):
189+
return VersionTag(version, match.group(0))
200190

201-
parts = match.groupdict()
202-
try:
203-
version = f"{parts['major']}.{parts['minor']}.{parts['patch']}"
204-
except KeyError:
191+
if not all(value in groups for value in ["major", "minor", "patch"]):
205192
return None
206193

207-
if parts.get("prerelease"):
208-
version = f"{version}-{parts['prerelease']}"
209-
if parts.get("devrelease"):
210-
version = f"{version}{parts['devrelease']}"
194+
version = self._extract_version(match)
211195
return VersionTag(version, match.group(0))
212196

213197
def normalize_tag(
@@ -284,3 +268,16 @@ def from_settings(cls, settings: Settings) -> Self:
284268
ignored_tag_formats=settings["ignored_tag_formats"],
285269
merge_prereleases=settings["changelog_merge_prerelease"],
286270
)
271+
272+
def _extract_version(self, match: re.Match[str]) -> str:
273+
groups = match.groupdict()
274+
parts: list[str] = [groups["major"]]
275+
if minor := groups.get("minor"):
276+
parts.append(f".{minor}")
277+
if patch := groups.get("patch"):
278+
parts.append(f".{patch}")
279+
if prerelease := groups.get("prerelease"):
280+
parts.append(f"-{prerelease}")
281+
if devrelease := groups.get("devrelease"):
282+
parts.append(devrelease)
283+
return "".join(parts)

0 commit comments

Comments
 (0)