Skip to content

Commit

Permalink
fix: Fix changelog generation in tag-mode (python-semantic-release#171)
Browse files Browse the repository at this point in the history
  • Loading branch information
betaboon committed Aug 5, 2022
1 parent 5f28b83 commit 6997a66
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 10 deletions.
10 changes: 3 additions & 7 deletions semantic_release/history/logs.py
Expand Up @@ -93,12 +93,8 @@ def generate_changelog(from_version: str, to_version: str = None) -> dict:
# Additional sections will be added as new types are encountered
changes: dict = {"breaking": []}

rev = None
if from_version:
rev = from_version

found_the_release = to_version is None
for _hash, commit_message in get_commit_log(rev):
found_the_release = to_version is not None
for _hash, commit_message in get_commit_log(from_version, to_version):
if not found_the_release:
# Skip until we find the last commit in this release
# (we are looping in the order of newest -> oldest)
Expand All @@ -110,7 +106,7 @@ def generate_changelog(from_version: str, to_version: str = None) -> dict:
)
found_the_release = True

if from_version is not None and from_version in commit_message:
if from_version in commit_message:
# We reached the previous release
logger.debug(f"{from_version} reached, ending changelog generation")
break
Expand Down
22 changes: 19 additions & 3 deletions semantic_release/vcs_helpers.py
Expand Up @@ -37,18 +37,34 @@ def get_formatted_tag(version):
return tag_format.format(version=version)


def get_commit_log(from_rev=None):
def get_commit_log(from_rev=None, to_rev=None):
"""Yield all commit messages from last to first."""
rev = None
if from_rev:
from_rev = get_formatted_tag(from_rev)
try:
repo().commit(from_rev)
rev = f"...{from_rev}"
except BadName:
from_rev = None
logger.debug(
f"Reference {from_rev} does not exist, considering entire history"
)
if to_rev:
to_rev = get_formatted_tag(to_rev)
try:
repo().commit(to_rev)
except BadName:
to_rev = None
logger.debug(
f"Reference {to_rev} does not exist, considering entire history until HEAD"
)

rev = None
if from_rev and to_rev:
rev = f"{to_rev}...{from_rev}"
elif from_rev:
rev = f"...{from_rev}"
elif to_rev:
rev = f"{to_rev}..."

for commit in repo().iter_commits(rev):
yield (commit.hexsha, commit.message.replace("\r\n", "\n"))
Expand Down

0 comments on commit 6997a66

Please sign in to comment.