Skip to content

Commit 15ea15d

Browse files
authored
fix(changelog): ensure changelog_message_builder_hook can access and modify change_type (#1002)
1 parent 9a49892 commit 15ea15d

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

‎commitizen/changelog.py‎

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,13 @@ def generate_tree_from_commits(
159159
message=map_pat.match(commit.message)
160160
ifmessage:
161161
parsed_message: dict=message.groupdict()
162-
# change_type becomes optional by providing None
163-
change_type=parsed_message.pop("change_type", None)
164162

165-
ifchange_type_map:
166-
change_type=change_type_map.get(change_type, change_type)
167163
ifchangelog_message_builder_hook:
168164
parsed_message=changelog_message_builder_hook(parsed_message, commit)
169165
ifparsed_message:
166+
change_type=parsed_message.pop("change_type", None)
167+
ifchange_type_map:
168+
change_type=change_type_map.get(change_type, change_type)
170169
changes[change_type].append(parsed_message)
171170

172171
# Process body from commit message
@@ -177,14 +176,14 @@ def generate_tree_from_commits(
177176
continue
178177
parsed_message_body: dict=message_body.groupdict()
179178

180-
change_type=parsed_message_body.pop("change_type", None)
181-
ifchange_type_map:
182-
change_type=change_type_map.get(change_type, change_type)
183179
ifchangelog_message_builder_hook:
184180
parsed_message_body=changelog_message_builder_hook(
185181
parsed_message_body, commit
186182
)
187183
ifparsed_message_body:
184+
change_type=parsed_message_body.pop("change_type", None)
185+
ifchange_type_map:
186+
change_type=change_type_map.get(change_type, change_type)
188187
changes[change_type].append(parsed_message_body)
189188

190189
yield{"version": current_tag_name, "date": current_tag_date, "changes": changes}

‎tests/test_changelog.py‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,6 +1347,37 @@ def changelog_message_builder_hook(message: dict, commit: git.GitCommit):
13471347
assertRE_HEADER.match(line), f"Line {no} should not be there: {line}"
13481348

13491349

1350+
deftest_changelog_message_builder_hook_can_access_and_modify_change_type(
1351+
gitcommits, tags, any_changelog_format: ChangelogFormat
1352+
):
1353+
defchangelog_message_builder_hook(message: dict, commit: git.GitCommit):
1354+
assert"change_type"inmessage
1355+
message["change_type"] ="overridden"
1356+
returnmessage
1357+
1358+
parser=ConventionalCommitsCz.commit_parser
1359+
changelog_pattern=ConventionalCommitsCz.changelog_pattern
1360+
loader=ConventionalCommitsCz.template_loader
1361+
template=any_changelog_format.template
1362+
tree=changelog.generate_tree_from_commits(
1363+
gitcommits,
1364+
tags,
1365+
parser,
1366+
changelog_pattern,
1367+
changelog_message_builder_hook=changelog_message_builder_hook,
1368+
)
1369+
result=changelog.render_changelog(tree, loader, template)
1370+
1371+
RE_HEADER=re.compile(r"^### (?P<type>.+)$")
1372+
# There should be only "overridden" change type headers
1373+
forno, lineinenumerate(result.splitlines()):
1374+
if (line:=line.strip()) and (match:=RE_HEADER.match(line)):
1375+
change_type=match.group("type")
1376+
assert (
1377+
change_type=="overridden"
1378+
), f"Line {no}: type {change_type} should have been overridden"
1379+
1380+
13501381
deftest_get_smart_tag_range_returns_an_extra_for_a_range(tags):
13511382
start, end= (
13521383
tags[0],

0 commit comments

Comments
(0)