Skip to content

Commit bf857f4

Browse files
KyleKingLee-W
authored andcommitted
refactor(#323): address PR feedback
1 parent fb08300 commit bf857f4

File tree

4 files changed

+39
-19
lines changed

4 files changed

+39
-19
lines changed

commitizen/changelog.py

+13-6
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,21 @@ def generate_tree_from_commits(
130130

131131

132132
def order_changelog_tree(tree: Iterable, change_type_order: List[str]) -> Iterable:
133+
if len(set(change_type_order)) != len(change_type_order):
134+
raise RuntimeError(
135+
f"Change types contain duplicates types ({change_type_order})"
136+
)
137+
133138
sorted_tree = []
134139
for entry in tree:
135-
entry_change_types = sorted(entry["changes"].keys())
136-
ordered_change_types = []
137-
for ct in change_type_order + entry_change_types:
138-
if ct in entry_change_types and ct not in ordered_change_types:
139-
ordered_change_types.append(ct)
140-
changes = [(ct, entry["changes"][ct]) for ct in ordered_change_types]
140+
ordered_change_types = change_type_order + sorted(
141+
set(entry["changes"].keys()) - set(change_type_order)
142+
)
143+
changes = [
144+
(ct, entry["changes"][ct])
145+
for ct in ordered_change_types
146+
if ct in entry["changes"]
147+
]
141148
sorted_tree.append({**entry, **{"changes": OrderedDict(changes)}})
142149
return sorted_tree
143150

docs/customization.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ The equivalent example for a json config file:
5252
```json
5353
{
5454
"commitizen": {
55-
"name": "cz_customize",
55+
"name": "cz_customize",
5656
"customize": {
5757
"message_template": "{{change_type}}:{% if show_message %} {{message}}{% endif %}",
5858
"example": "feature: this feature enable customize through config file",
@@ -66,7 +66,7 @@ The equivalent example for a json config file:
6666
"hotfix": "PATCH"
6767
},
6868
"change_type_order": ["BREAKING CHANGE", "feat", "fix", "refactor", "perf"],
69-
"info_path": "cz_customize_info.txt",
69+
"info_path": "cz_customize_info.txt",
7070
"info": "This is customized info",
7171
"questions": [
7272
{

pyproject.toml

-3
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,6 @@ freezegun = "^0.3.15"
7171
pydocstyle = "^5.0.2"
7272
pre-commit = "^2.6.0"
7373

74-
# FIXME: Remove for submission (testing issues/319-only)
75-
pytest-watch = "*"
76-
7774
[tool.poetry.scripts]
7875
cz = "commitizen.cli:main"
7976
git-cz = "commitizen.cli:main"

tests/test_changelog.py

+24-8
Original file line numberDiff line numberDiff line change
@@ -803,26 +803,42 @@ def test_generate_tree_from_commits(gitcommits, tags):
803803
(
804804
["BREAKING CHANGE", "refactor"],
805805
{
806-
2: (["refactor", "feat", "fix"], ["feat", "fix", "refactor"]),
807-
3: (["BREAKING CHANGE", "refactor"], ["refactor", "BREAKING CHANGE"]),
806+
"1.1.0": {
807+
"original": ["feat", "fix", "refactor"],
808+
"sorted": ["refactor", "feat", "fix"],
809+
},
810+
"1.0.0": {
811+
"original": ["refactor", "BREAKING CHANGE"],
812+
"sorted": ["BREAKING CHANGE", "refactor"],
813+
},
808814
},
809815
),
810816
),
811817
)
812818
def test_order_changelog_tree(change_type_order, expected_reordering):
813-
tree = tuple(changelog.order_changelog_tree(COMMITS_TREE, change_type_order))
819+
tree = changelog.order_changelog_tree(COMMITS_TREE, change_type_order)
814820

815-
index_of_reordered_entry = [*expected_reordering.keys()]
816821
for index, entry in enumerate(tuple(tree)):
817-
if index in index_of_reordered_entry:
818-
sorted_order, original_order = expected_reordering[index]
822+
version = tree[index]["version"]
823+
if version in expected_reordering:
824+
# Verify that all keys are present
819825
assert [*tree[index].keys()] == [*COMMITS_TREE[index].keys()]
820-
assert [*tree[index]["changes"].keys()] == sorted_order
821-
assert [*COMMITS_TREE[index]["changes"].keys()] == original_order
826+
# Verify that the reorder only impacted the returned dict and not the original
827+
expected = expected_reordering[version]
828+
assert [*tree[index]["changes"].keys()] == expected["sorted"]
829+
assert [*COMMITS_TREE[index]["changes"].keys()] == expected["original"]
822830
else:
823831
assert [*entry["changes"].keys()] == [*tree[index]["changes"].keys()]
824832

825833

834+
def test_order_changelog_tree_raises():
835+
change_type_order = ["BREAKING CHANGE", "feat", "refactor", "feat"]
836+
with pytest.raises(RuntimeError) as excinfo:
837+
changelog.order_changelog_tree(COMMITS_TREE, change_type_order)
838+
839+
assert " duplicate" in str(excinfo)
840+
841+
826842
def test_render_changelog(gitcommits, tags, changelog_content):
827843
parser = defaults.commit_parser
828844
changelog_pattern = defaults.bump_pattern

0 commit comments

Comments
 (0)