11
11
from commitizen import changelog , defaults , factory , git , out
12
12
from commitizen .changelog_formats import get_changelog_format
13
13
from commitizen .config import BaseConfig
14
- from commitizen .cz .base import ChangelogReleaseHook , MessageBuilderHook
15
14
from commitizen .cz .utils import strip_local_version
16
15
from commitizen .exceptions import (
17
16
DryRunExit ,
@@ -174,28 +173,23 @@ def _write_changelog(
174
173
175
174
changelog_file .write (changelog_out )
176
175
177
- def _export_template (self ) -> None :
178
- tpl = changelog .get_changelog_template (self .cz .template_loader , self .template )
179
- # TODO: fix the following type ignores
180
- src = Path (tpl .filename ) # type: ignore[arg-type]
181
- Path (self .export_template_to ).write_text (src .read_text ()) # type: ignore[arg-type]
176
+ def _export_template (self , dist : str ) -> None :
177
+ filename = changelog .get_changelog_template (
178
+ self .cz .template_loader , self .template
179
+ ).filename
180
+ if filename is None :
181
+ raise NotAllowed ("Template filename is not set" )
182
+
183
+ text = Path (filename ).read_text ()
184
+ Path (dist ).write_text (text )
182
185
183
186
def __call__ (self ) -> None :
184
187
commit_parser = self .cz .commit_parser
185
188
changelog_pattern = self .cz .changelog_pattern
186
189
start_rev = self .start_rev
187
- unreleased_version = self .unreleased_version
188
- changelog_meta = changelog .Metadata ()
189
- change_type_map : dict [str , str ] | None = self .change_type_map
190
- changelog_message_builder_hook : MessageBuilderHook | None = (
191
- self .cz .changelog_message_builder_hook
192
- )
193
- changelog_release_hook : ChangelogReleaseHook | None = (
194
- self .cz .changelog_release_hook
195
- )
196
190
197
191
if self .export_template_to :
198
- return self ._export_template ()
192
+ return self ._export_template (self . export_template_to )
199
193
200
194
if not changelog_pattern or not commit_parser :
201
195
raise NoPatternMapError (
@@ -209,45 +203,53 @@ def __call__(self) -> None:
209
203
assert self .file_name
210
204
211
205
tags = self .tag_rules .get_version_tags (git .get_tags (), warn = True )
212
- end_rev = ""
206
+ changelog_meta = changelog . Metadata ()
213
207
if self .incremental :
214
208
changelog_meta = self .changelog_format .get_metadata (self .file_name )
215
209
if changelog_meta .latest_version :
216
210
start_rev = self ._find_incremental_rev (
217
211
strip_local_version (changelog_meta .latest_version_tag or "" ), tags
218
212
)
213
+
214
+ end_rev = ""
219
215
if self .rev_range :
220
216
start_rev , end_rev = changelog .get_oldest_and_newest_rev (
221
217
tags ,
222
218
self .rev_range ,
223
219
self .tag_rules ,
224
220
)
221
+
225
222
commits = git .get_commits (start = start_rev , end = end_rev , args = "--topo-order" )
226
223
if not commits and (
227
224
self .current_version is None or not self .current_version .is_prerelease
228
225
):
229
226
raise NoCommitsFoundError ("No commits found" )
227
+
230
228
tree = changelog .generate_tree_from_commits (
231
229
commits ,
232
230
tags ,
233
231
commit_parser ,
234
232
changelog_pattern ,
235
- unreleased_version ,
236
- change_type_map = change_type_map ,
237
- changelog_message_builder_hook = changelog_message_builder_hook ,
238
- changelog_release_hook = changelog_release_hook ,
233
+ self . unreleased_version ,
234
+ change_type_map = self . change_type_map ,
235
+ changelog_message_builder_hook = self . cz . changelog_message_builder_hook ,
236
+ changelog_release_hook = self . cz . changelog_release_hook ,
239
237
rules = self .tag_rules ,
240
238
)
241
239
if self .change_type_order :
242
240
tree = changelog .generate_ordered_changelog_tree (
243
241
tree , self .change_type_order
244
242
)
245
243
246
- extras = self .cz .template_extras .copy ()
247
- extras .update (self .config .settings ["extras" ])
248
- extras .update (self .extras )
249
244
changelog_out = changelog .render_changelog (
250
- tree , loader = self .cz .template_loader , template = self .template , ** extras
245
+ tree ,
246
+ self .cz .template_loader ,
247
+ self .template ,
248
+ ** {
249
+ ** self .cz .template_extras ,
250
+ ** self .config .settings ["extras" ],
251
+ ** self .extras ,
252
+ },
251
253
).lstrip ("\n " )
252
254
253
255
# Dry_run is executed here to avoid checking and reading the files
0 commit comments