2
2
3
3
import os
4
4
import os .path
5
- from collections .abc import Generator
5
+ from collections .abc import Generator , Iterable , Mapping
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
10
10
11
from commitizen import changelog , defaults , factory , git , out
11
12
from commitizen .changelog_formats import get_changelog_format
28
29
class Changelog :
29
30
"""Generate a changelog based on the commit history."""
30
31
31
- def __init__ (self , config : BaseConfig , args ):
32
+ def __init__ (self , config : BaseConfig , args : Mapping [ str , Any ] ):
32
33
if not git .is_git_project ():
33
34
raise NotAGitProjectError ()
34
35
@@ -76,10 +77,11 @@ def __init__(self, config: BaseConfig, args):
76
77
self .change_type_map = (
77
78
self .config .settings .get ("change_type_map" ) or self .cz .change_type_map
78
79
)
79
- self .change_type_order = (
80
+ self .change_type_order = cast (
81
+ list [str ],
80
82
self .config .settings .get ("change_type_order" )
81
83
or self .cz .change_type_order
82
- or defaults .CHANGE_TYPE_ORDER
84
+ or defaults .CHANGE_TYPE_ORDER ,
83
85
)
84
86
self .rev_range = args .get ("rev_range" )
85
87
self .tag_format : str = (
@@ -102,7 +104,7 @@ def __init__(self, config: BaseConfig, args):
102
104
self .extras = args .get ("extras" ) or {}
103
105
self .export_template_to = args .get ("export_template" )
104
106
105
- def _find_incremental_rev (self , latest_version : str , tags : list [GitTag ]) -> str :
107
+ def _find_incremental_rev (self , latest_version : str , tags : Iterable [GitTag ]) -> str :
106
108
"""Try to find the 'start_rev'.
107
109
108
110
We use a similarity approach. We know how to parse the version from the markdown
@@ -151,18 +153,18 @@ def write_changelog(
151
153
152
154
changelog_file .write (changelog_out )
153
155
154
- def export_template (self ):
156
+ def export_template (self ) -> None :
155
157
tpl = changelog .get_changelog_template (self .cz .template_loader , self .template )
156
- src = Path (tpl .filename )
157
- Path (self .export_template_to ).write_text (src .read_text ())
158
+ src = Path (tpl .filename ) # type: ignore
159
+ Path (self .export_template_to ).write_text (src .read_text ()) # type: ignore
158
160
159
- def __call__ (self ):
161
+ def __call__ (self ) -> None :
160
162
commit_parser = self .cz .commit_parser
161
163
changelog_pattern = self .cz .changelog_pattern
162
164
start_rev = self .start_rev
163
165
unreleased_version = self .unreleased_version
164
166
changelog_meta = changelog .Metadata ()
165
- change_type_map : dict | None = self .change_type_map
167
+ change_type_map : dict [ str , str ] | None = self .change_type_map # type: ignore
166
168
changelog_message_builder_hook : MessageBuilderHook | None = (
167
169
self .cz .changelog_message_builder_hook
168
170
)
@@ -190,7 +192,7 @@ def __call__(self):
190
192
changelog_meta = self .changelog_format .get_metadata (self .file_name )
191
193
if changelog_meta .latest_version :
192
194
start_rev = self ._find_incremental_rev (
193
- strip_local_version (changelog_meta .latest_version_tag ), tags
195
+ strip_local_version (changelog_meta .latest_version_tag or "" ), tags
194
196
)
195
197
if self .rev_range :
196
198
start_rev , end_rev = changelog .get_oldest_and_newest_rev (
0 commit comments