22
33import os
44import os .path
5- from collections .abc import Generator , Iterable , Mapping
5+ from collections .abc import Generator , Iterable
66from difflib import SequenceMatcher
77from operator import itemgetter
88from pathlib import Path
9- from typing import Any , cast
9+ from typing import Any , TypedDict , cast
1010
1111from commitizen import changelog , defaults , factory , git , out
1212from commitizen .changelog_formats import get_changelog_format
2626from commitizen .version_schemes import get_version_scheme
2727
2828
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+
2947class Changelog :
3048 """Generate a changelog based on the commit history."""
3149
32- def __init__ (self , config : BaseConfig , args : Mapping [ str , Any ] ) -> None :
50+ def __init__ (self , config : BaseConfig , args : ChangelogArgs ) -> None :
3351 if not git .is_git_project ():
3452 raise NotAGitProjectError ()
3553
@@ -59,17 +77,17 @@ def __init__(self, config: BaseConfig, args: Mapping[str, Any]) -> None:
5977
6078 self .changelog_format = get_changelog_format (self .config , self .file_name )
6179
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")
6482 )
65- self .dry_run = args [ "dry_run" ]
83+ self .dry_run = bool ( args . get ( "dry_run" ))
6684
6785 self .scheme = get_version_scheme (
6886 self .config .settings , args .get ("version_scheme" )
6987 )
7088
7189 current_version = (
72- args .get ("current_version" , config .settings .get ("version" ) ) or ""
90+ args .get ("current_version" ) or self . config .settings .get ("version" ) or ""
7391 )
7492 self .current_version = self .scheme (current_version ) if current_version else None
7593
@@ -84,9 +102,7 @@ def __init__(self, config: BaseConfig, args: Mapping[str, Any]) -> None:
84102 or defaults .CHANGE_TYPE_ORDER ,
85103 )
86104 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" ]
90106 self .tag_rules = TagRules (
91107 scheme = self .scheme ,
92108 tag_format = self .tag_format ,
@@ -164,7 +180,7 @@ def __call__(self) -> None:
164180 start_rev = self .start_rev
165181 unreleased_version = self .unreleased_version
166182 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
168184 changelog_message_builder_hook : MessageBuilderHook | None = (
169185 self .cz .changelog_message_builder_hook
170186 )
0 commit comments