37
37
logger = getLogger ("commitizen" )
38
38
39
39
40
+ class BumpArguments (Settings , total = False ):
41
+ allow_no_commit : bool | None
42
+ annotated_tag_message : str | None
43
+ annotated_tag : bool
44
+ build_metadata : str | None
45
+ changelog_to_stdout : bool
46
+ changelog : bool
47
+ check_consistency : bool
48
+ devrelease : int | None
49
+ dry_run : bool
50
+ file_name : str
51
+ files_only : bool | None
52
+ get_next : bool
53
+ git_output_to_stderr : bool
54
+ gpg_sign : bool
55
+ increment_mode : str
56
+ increment : Increment | None
57
+ local_version : bool
58
+ manual_version : str | None
59
+ no_verify : bool
60
+ prerelease : Prerelease | None
61
+ retry : bool
62
+ yes : bool
63
+
64
+
40
65
class Bump :
41
66
"""Show prompt for the user to create a guided commit."""
42
67
43
- def __init__ (self , config : BaseConfig , arguments : dict ) -> None :
68
+ def __init__ (self , config : BaseConfig , arguments : BumpArguments ) -> None :
44
69
if not git .is_git_project ():
45
70
raise NotAGitProjectError ()
46
71
47
72
self .config : BaseConfig = config
48
73
self .encoding = config .settings ["encoding" ]
49
- self .arguments : dict = arguments
50
- self .bump_settings : dict = {
51
- ** config .settings ,
52
- ** {
53
- key : arguments [key ]
54
- for key in [
55
- "tag_format" ,
56
- "prerelease" ,
57
- "increment" ,
58
- "increment_mode" ,
59
- "bump_message" ,
60
- "gpg_sign" ,
61
- "annotated_tag" ,
62
- "annotated_tag_message" ,
63
- "major_version_zero" ,
64
- "prerelease_offset" ,
65
- "template" ,
66
- "file_name" ,
67
- ]
68
- if arguments .get (key ) is not None
74
+ self .arguments = arguments
75
+ self .bump_settings = cast (
76
+ BumpArguments ,
77
+ {
78
+ ** config .settings ,
79
+ ** {
80
+ k : v
81
+ for k , v in {
82
+ "annotated_tag_message" : arguments .get ("annotated_tag_message" ),
83
+ "annotated_tag" : arguments .get ("annotated_tag" ),
84
+ "bump_message" : arguments .get ("bump_message" ),
85
+ "file_name" : arguments .get ("file_name" ),
86
+ "gpg_sign" : arguments .get ("gpg_sign" ),
87
+ "increment_mode" : arguments .get ("increment_mode" ),
88
+ "increment" : arguments .get ("increment" ),
89
+ "major_version_zero" : arguments .get ("major_version_zero" ),
90
+ "prerelease_offset" : arguments .get ("prerelease_offset" ),
91
+ "prerelease" : arguments .get ("prerelease" ),
92
+ "tag_format" : arguments .get ("tag_format" ),
93
+ "template" : arguments .get ("template" ),
94
+ }.items ()
95
+ if v is not None
96
+ },
69
97
},
70
- }
98
+ )
71
99
self .cz = factory .committer_factory (self .config )
72
100
self .changelog_flag = arguments ["changelog" ]
73
101
self .changelog_config = self .config .settings .get ("update_changelog_on_bump" )
@@ -120,11 +148,10 @@ def _is_initial_tag(
120
148
121
149
def _find_increment (self , commits : list [git .GitCommit ]) -> Increment | None :
122
150
# Update the bump map to ensure major version doesn't increment.
123
- is_major_version_zero : bool = self .bump_settings ["major_version_zero" ]
124
151
# self.cz.bump_map = defaults.bump_map_major_version_zero
125
152
bump_map = (
126
153
self .cz .bump_map_major_version_zero
127
- if is_major_version_zero
154
+ if self . bump_settings [ "major_version_zero" ]
128
155
else self .cz .bump_map
129
156
)
130
157
bump_pattern = self .cz .bump_pattern
@@ -144,23 +171,14 @@ def __call__(self) -> None:
144
171
except TypeError :
145
172
raise NoVersionSpecifiedError ()
146
173
147
- bump_commit_message : str | None = self .bump_settings ["bump_message" ]
148
- version_files : list [str ] = self .bump_settings ["version_files" ]
149
- major_version_zero : bool = self .bump_settings ["major_version_zero" ]
150
- prerelease_offset : int = self .bump_settings ["prerelease_offset" ]
151
-
152
- dry_run : bool = self .arguments ["dry_run" ]
153
- is_yes : bool = self .arguments ["yes" ]
154
- increment : Increment | None = self .arguments ["increment" ]
155
- prerelease : Prerelease | None = self .arguments ["prerelease" ]
156
- devrelease : int | None = self .arguments ["devrelease" ]
157
- is_files_only : bool | None = self .arguments ["files_only" ]
158
- is_local_version : bool = self .arguments ["local_version" ]
174
+ increment = self .arguments ["increment" ]
175
+ prerelease = self .arguments ["prerelease" ]
176
+ devrelease = self .arguments ["devrelease" ]
177
+ is_local_version = self .arguments ["local_version" ]
159
178
manual_version = self .arguments ["manual_version" ]
160
179
build_metadata = self .arguments ["build_metadata" ]
161
- increment_mode : str = self .arguments ["increment_mode" ]
162
- get_next : bool = self .arguments ["get_next" ]
163
- allow_no_commit : bool | None = self .arguments ["allow_no_commit" ]
180
+ get_next = self .arguments ["get_next" ]
181
+ allow_no_commit = self .arguments ["allow_no_commit" ]
164
182
165
183
if manual_version :
166
184
if increment :
@@ -182,15 +200,15 @@ def __call__(self) -> None:
182
200
"--build-metadata cannot be combined with MANUAL_VERSION"
183
201
)
184
202
185
- if major_version_zero :
203
+ if self . bump_settings [ " major_version_zero" ] :
186
204
raise NotAllowed (
187
205
"--major-version-zero cannot be combined with MANUAL_VERSION"
188
206
)
189
207
190
208
if get_next :
191
209
raise NotAllowed ("--get-next cannot be combined with MANUAL_VERSION" )
192
210
193
- if major_version_zero :
211
+ if self . bump_settings [ " major_version_zero" ] :
194
212
if not current_version .release [0 ] == 0 :
195
213
raise NotAllowed (
196
214
f"--major-version-zero is meaningless for current version { current_version } "
@@ -215,7 +233,7 @@ def __call__(self) -> None:
215
233
else :
216
234
# If user specified changelog_to_stdout, they probably want the
217
235
# changelog to be generated as well, this is the most intuitive solution
218
- self .changelog_flag = (
236
+ self .changelog_flag = bool (
219
237
self .changelog_flag
220
238
or bool (self .changelog_to_stdout )
221
239
or self .changelog_config
@@ -227,7 +245,7 @@ def __call__(self) -> None:
227
245
current_tag , "name" , rules .normalize_tag (current_version )
228
246
)
229
247
230
- is_initial = self ._is_initial_tag (current_tag , is_yes )
248
+ is_initial = self ._is_initial_tag (current_tag , self . arguments [ "yes" ] )
231
249
232
250
if manual_version :
233
251
try :
@@ -273,16 +291,16 @@ def __call__(self) -> None:
273
291
new_version = current_version .bump (
274
292
increment ,
275
293
prerelease = prerelease ,
276
- prerelease_offset = prerelease_offset ,
294
+ prerelease_offset = self . bump_settings [ " prerelease_offset" ] ,
277
295
devrelease = devrelease ,
278
296
is_local_version = is_local_version ,
279
297
build_metadata = build_metadata ,
280
- exact_increment = increment_mode == "exact" ,
298
+ exact_increment = self . arguments [ " increment_mode" ] == "exact" ,
281
299
)
282
300
283
301
new_tag_version = rules .normalize_tag (new_version )
284
302
message = bump .create_commit_message (
285
- current_version , new_version , bump_commit_message
303
+ current_version , new_version , self . bump_settings [ "bump_message" ]
286
304
)
287
305
288
306
if get_next :
@@ -314,6 +332,7 @@ def __call__(self) -> None:
314
332
)
315
333
316
334
files : list [str ] = []
335
+ dry_run = self .arguments ["dry_run" ]
317
336
if self .changelog_flag :
318
337
args = {
319
338
"unreleased_version" : new_tag_version ,
@@ -342,7 +361,7 @@ def __call__(self) -> None:
342
361
bump .update_version_in_files (
343
362
str (current_version ),
344
363
str (new_version ),
345
- version_files ,
364
+ self . bump_settings [ " version_files" ] ,
346
365
check_consistency = self .check_consistency ,
347
366
encoding = self .encoding ,
348
367
)
@@ -366,7 +385,7 @@ def __call__(self) -> None:
366
385
else None ,
367
386
)
368
387
369
- if is_files_only :
388
+ if self . arguments [ "files_only" ] :
370
389
raise ExpectedExit ()
371
390
372
391
# FIXME: check if any changes have been staged
@@ -395,11 +414,15 @@ def __call__(self) -> None:
395
414
396
415
c = git .tag (
397
416
new_tag_version ,
398
- signed = self .bump_settings .get ("gpg_sign" , False )
399
- or bool (self .config .settings .get ("gpg_sign" , False )),
400
- annotated = self .bump_settings .get ("annotated_tag" , False )
401
- or bool (self .config .settings .get ("annotated_tag" , False ))
402
- or bool (self .bump_settings .get ("annotated_tag_message" , False )),
417
+ signed = bool (
418
+ self .bump_settings .get ("gpg_sign" )
419
+ or self .config .settings .get ("gpg_sign" )
420
+ ),
421
+ annotated = bool (
422
+ self .bump_settings .get ("annotated_tag" )
423
+ or self .config .settings .get ("annotated_tag" )
424
+ or self .bump_settings .get ("annotated_tag_message" )
425
+ ),
403
426
msg = self .bump_settings .get ("annotated_tag_message" , None ),
404
427
# TODO: also get from self.config.settings?
405
428
)
0 commit comments