Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fbabc2a

Browse files
committed
refactor(changelog): refactor generate_tree_from_commits
Treats 'Unreleased' as if it is a git tag.
1 parent c6df321 commit fbabc2a

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

‎commitizen/changelog.py‎

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -81,23 +81,20 @@ def generate_tree_from_commits(
8181
body_map_pat = re.compile(commit_parser, re.MULTILINE | re.DOTALL)
8282

8383
# Check if the latest commit is not tagged
84-
latest_commit = commits[0]
85-
current_tag: Optional[GitTag] = get_commit_tag(latest_commit, tags)
86-
87-
current_tag_name: str = unreleased_version or "Unreleased"
88-
current_tag_date: str = ""
89-
if unreleased_version is not None:
90-
current_tag_date = date.today().isoformat()
91-
if (
92-
current_tag is not None
93-
and current_tag.name
94-
and tag_pattern.fullmatch(current_tag.name)
95-
):
96-
current_tag_name = current_tag.name
97-
current_tag_date = current_tag.date
84+
latest_commit: GitCommit = commits[0]
85+
86+
# create the first_tag
87+
# Note: Changelog has no date for "Unreleased".
88+
if unreleased_version:
89+
first_tag = GitTag(
90+
unreleased_version, latest_commit.rev, date.today().isoformat()
91+
)
92+
else:
93+
unreleased_tag = GitTag("Unreleased", latest_commit.rev, "")
94+
first_tag = get_commit_tag(latest_commit, tags) or unreleased_tag
9895

9996
changes: Dict = defaultdict(list)
100-
used_tags: List = [current_tag]
97+
used_tags: List = [first_tag]
10198
for commit in commits:
10299

103100
# determine if we found a new matching tag
@@ -110,15 +107,12 @@ def generate_tree_from_commits(
110107

111108
# new node if we have a tag match
112109
if is_tag_match:
113-
used_tags.append(commit_tag)
114110
yield {
115-
"version": current_tag_name,
116-
"date": current_tag_date,
111+
"version": used_tags[-1].name,
112+
"date": used_tags[-1].date,
117113
"changes": changes,
118114
}
119-
assert commit_tag is not None # for mypy
120-
current_tag_name = commit_tag.name
121-
current_tag_date = commit_tag.date
115+
used_tags.append(commit_tag)
122116
changes = defaultdict(list)
123117

124118
matches = pat.match(commit.message)
@@ -134,7 +128,11 @@ def generate_tree_from_commits(
134128
body_map_pat,
135129
)
136130

137-
yield {"version": current_tag_name, "date": current_tag_date, "changes": changes}
131+
yield {
132+
"version": used_tags[-1].name,
133+
"date": used_tags[-1].date,
134+
"changes": changes,
135+
}
138136

139137

140138
def update_changes_for_commit(

‎tests/test_changelog.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,7 @@ def test_generate_tree_from_commits(gitcommits, tags, tag_parser):
843843
expected_tree = _filter_tree(tag_pattern, COMMITS_TREE)
844844

845845
# compare the contents of each tree
846+
tree = list(tree)
846847
for outcome, expected in zip(tree, expected_tree):
847848
assert outcome == expected
848849

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /