@@ -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_parts (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_parts (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_parts (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