7
7
import sys
8
8
import warnings
9
9
from subprocess import CalledProcessError , check_output
10
- from typing import TYPE_CHECKING , Callable , ClassVar , Literal , Type , Union
10
+ from typing import TYPE_CHECKING , ClassVar , Literal , Type , Union
11
11
from urllib .parse import urlsplit , urlunsplit
12
12
13
13
from git_changelog .commit import (
18
18
ConventionalCommitConvention ,
19
19
)
20
20
from git_changelog .providers import Bitbucket , GitHub , GitLab , ProviderRefParser
21
- from git_changelog .versioning import ParsedVersion , VersionBumper , bump_pep440 , bump_semver , parse_pep440 , parse_semver
21
+ from git_changelog .versioning import ParsedVersion , bump_pep440 , bump_semver , parse_pep440 , parse_semver
22
22
23
23
if TYPE_CHECKING :
24
24
from pathlib import Path
@@ -266,20 +266,20 @@ def __init__(
266
266
)
267
267
self .sections = sections
268
268
269
+ # get version parser based on selected versioning scheme
270
+ self .version_parser , self .version_bumper = {
271
+ "semver" : (parse_semver , bump_semver ),
272
+ "pep440" : (parse_pep440 , bump_pep440 ),
273
+ }[versioning ]
274
+
269
275
# get git log and parse it into list of commits
270
276
self .raw_log : str = self .get_log ()
271
277
self .commits : list [Commit ] = self .parse_commits ()
272
278
self .tag_commits : list [Commit ] = [commit for commit in self .commits [1 :] if commit .tag ]
273
279
self .tag_commits .insert (0 , self .commits [0 ])
274
280
275
- # get version parser based on selected versioning scheme
276
- version_parser , version_bumper = {
277
- "semver" : (parse_semver , bump_semver ),
278
- "pep440" : (parse_pep440 , bump_pep440 ),
279
- }[versioning ]
280
-
281
281
# apply dates to commits and group them by version
282
- v_list , v_dict = self ._group_commits_by_version (version_parser = version_parser )
282
+ v_list , v_dict = self ._group_commits_by_version ()
283
283
self .versions_list = v_list
284
284
self .versions_dict = v_dict
285
285
@@ -293,7 +293,7 @@ def __init__(
293
293
if bump is None :
294
294
bump = "auto"
295
295
if bump :
296
- self ._bump (bump , version_bumper = version_bumper )
296
+ self ._bump (bump )
297
297
298
298
# fix a single, initial version to the user specified version or 0.1.0 if none is specified
299
299
self ._fix_single_version (bump )
@@ -386,6 +386,7 @@ def parse_commits(self) -> list[Commit]:
386
386
subject = lines [pos + 9 ],
387
387
body = body ,
388
388
parse_trailers = self .parse_trailers ,
389
+ version_parser = self .version_parser ,
389
390
)
390
391
391
392
pos += nbl_index + 1
@@ -406,19 +407,12 @@ def parse_commits(self) -> list[Commit]:
406
407
407
408
return list (commits_map .values ())
408
409
409
- def _group_commits_by_version (
410
- self ,
411
- version_parser : Callable [[str ], tuple [ParsedVersion , str ]],
412
- ) -> tuple [list [Version ], dict [str , Version ]]:
410
+ def _group_commits_by_version (self ) -> tuple [list [Version ], dict [str , Version ]]:
413
411
"""Group commits into versions.
414
412
415
413
Commits are assigned to the version they were first released with.
416
414
A commit is assigned to exactly one version.
417
415
418
- Parameters:
419
- version_parser: Version parser to use when grouping commits by versions.
420
- Versions that cannot be parsed by the given parser will be ignored.
421
-
422
416
Returns:
423
417
versions_list: The list of versions order descending by timestamp.
424
418
versions_dict: A dictionary of versions with the tag name as keys.
@@ -441,7 +435,7 @@ def _group_commits_by_version(
441
435
while next_commits :
442
436
next_commit = next_commits .pop (0 )
443
437
if next_commit .tag :
444
- parsed_version , _ = version_parser (next_commit .tag )
438
+ parsed_version , _ = self . version_parser (next_commit .tag )
445
439
if not previous_parsed_version or parsed_version > previous_parsed_version :
446
440
previous_parsed_version = parsed_version
447
441
previous_versions [version .tag ] = next_commit .tag
@@ -484,7 +478,7 @@ def _assign_previous_versions(self, versions_dict: dict[str, Version], previous_
484
478
target = version .tag or "HEAD" ,
485
479
)
486
480
487
- def _bump (self , version : str , version_bumper : VersionBumper ) -> None :
481
+ def _bump (self , version : str ) -> None :
488
482
last_version = self .versions_list [0 ]
489
483
if not last_version .tag and last_version .previous_version :
490
484
last_tag = last_version .previous_version .tag
@@ -499,13 +493,13 @@ def _bump(self, version: str, version_bumper: VersionBumper) -> None:
499
493
if commit .convention ["is_minor" ]:
500
494
version = "minor"
501
495
version = "+" .join ((version , * plus ))
502
- if version in version_bumper .strategies :
496
+ if version in self . version_bumper .strategies :
503
497
# bump version
504
- last_version .planned_tag = version_bumper (last_tag , version , zerover = self .zerover )
498
+ last_version .planned_tag = self . version_bumper (last_tag , version , zerover = self .zerover )
505
499
else :
506
500
# user specified version
507
501
try :
508
- version_bumper (version )
502
+ self . version_bumper (version )
509
503
except ValueError as error :
510
504
raise ValueError (f"{ error } ; typo in bumping strategy? Check the CLI help and our docs" ) from error
511
505
last_version .planned_tag = version
0 commit comments