2
2
3
3
import os
4
4
import os .path
5
- from collections .abc import Generator , Iterable , Mapping
5
+ from collections .abc import Generator , Iterable
6
6
from difflib import SequenceMatcher
7
7
from operator import itemgetter
8
8
from pathlib import Path
9
- from typing import Any , cast
9
+ from typing import Any , TypedDict , cast
10
10
11
11
from commitizen import changelog , defaults , factory , git , out
12
12
from commitizen .changelog_formats import get_changelog_format
26
26
from commitizen .version_schemes import get_version_scheme
27
27
28
28
29
+ class ChangelogArgs (TypedDict , total = False ):
30
+ change_type_map : dict [str , str ]
31
+ change_type_order : list [str ]
32
+ current_version : str
33
+ dry_run : bool
34
+ file_name : str
35
+ incremental : bool
36
+ merge_prerelease : bool
37
+ rev_range : str
38
+ start_rev : str
39
+ tag_format : str
40
+ unreleased_version : str | None
41
+ version_scheme : str
42
+ template : str
43
+ extras : dict [str , Any ]
44
+ export_template : str
45
+
46
+
29
47
class Changelog :
30
48
"""Generate a changelog based on the commit history."""
31
49
32
- def __init__ (self , config : BaseConfig , args : Mapping [ str , Any ] ) -> None :
50
+ def __init__ (self , config : BaseConfig , args : ChangelogArgs ) -> None :
33
51
if not git .is_git_project ():
34
52
raise NotAGitProjectError ()
35
53
@@ -59,17 +77,17 @@ def __init__(self, config: BaseConfig, args: Mapping[str, Any]) -> None:
59
77
60
78
self .changelog_format = get_changelog_format (self .config , self .file_name )
61
79
62
- self .incremental = args [ "incremental" ] or self . config . settings . get (
63
- " changelog_incremental"
80
+ self .incremental = bool (
81
+ args . get ( "incremental" ) or self . config . settings . get ( " changelog_incremental")
64
82
)
65
- self .dry_run = args [ "dry_run" ]
83
+ self .dry_run = bool ( args . get ( "dry_run" ))
66
84
67
85
self .scheme = get_version_scheme (
68
86
self .config .settings , args .get ("version_scheme" )
69
87
)
70
88
71
89
current_version = (
72
- args .get ("current_version" , config .settings .get ("version" ) ) or ""
90
+ args .get ("current_version" ) or self . config .settings .get ("version" ) or ""
73
91
)
74
92
self .current_version = self .scheme (current_version ) if current_version else None
75
93
@@ -84,9 +102,7 @@ def __init__(self, config: BaseConfig, args: Mapping[str, Any]) -> None:
84
102
or defaults .CHANGE_TYPE_ORDER ,
85
103
)
86
104
self .rev_range = args .get ("rev_range" )
87
- self .tag_format : str = (
88
- args .get ("tag_format" ) or self .config .settings ["tag_format" ]
89
- )
105
+ self .tag_format = args .get ("tag_format" ) or self .config .settings ["tag_format" ]
90
106
self .tag_rules = TagRules (
91
107
scheme = self .scheme ,
92
108
tag_format = self .tag_format ,
@@ -164,7 +180,7 @@ def __call__(self) -> None:
164
180
start_rev = self .start_rev
165
181
unreleased_version = self .unreleased_version
166
182
changelog_meta = changelog .Metadata ()
167
- change_type_map : dict [str , str ] | None = self .change_type_map # type: ignore
183
+ change_type_map : dict [str , str ] | None = self .change_type_map
168
184
changelog_message_builder_hook : MessageBuilderHook | None = (
169
185
self .cz .changelog_message_builder_hook
170
186
)
0 commit comments