Skip to content

Commit 2bdf3cf

Browse files
committed
refactor(ChangelogFormat): refactor get_metadata_from_file for better readability and better type
1 parent cc981fc commit 2bdf3cf

File tree

1 file changed

+27
-21
lines changed
  • commitizen/changelog_formats

1 file changed

+27
-21
lines changed

commitizen/changelog_formats/base.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import os
44
from abc import ABCMeta
5-
from typing import IO, Any, ClassVar
5+
from typing import IO, ClassVar
66

77
from commitizen.changelog import Metadata
88
from commitizen.config.base_config import BaseConfig
@@ -40,34 +40,40 @@ def get_metadata(self, filepath: str) -> Metadata:
4040
with open(filepath, encoding=self.encoding) as changelog_file:
4141
return self.get_metadata_from_file(changelog_file)
4242

43-
def get_metadata_from_file(self, file: IO[Any]) -> Metadata:
44-
meta = Metadata()
43+
def get_metadata_from_file(self, file: IO[str]) -> Metadata:
44+
out_metadata = Metadata()
4545
unreleased_level: int | None = None
46-
for index, line in enumerate(file):
47-
line = line.strip().lower()
4846

49-
unreleased: int | None = None
50-
if "unreleased" in line:
51-
unreleased = self.parse_title_level(line)
47+
lines = file.readlines()
48+
for index, line in enumerate(line.strip().lower() for line in lines):
49+
parsed_unreleased_level = self.parse_title_level(line)
50+
current_unreleased_level = (
51+
parsed_unreleased_level if "unreleased" in line else None
52+
)
53+
5254
# Try to find beginning and end lines of the unreleased block
53-
if unreleased:
54-
meta.unreleased_start = index
55-
unreleased_level = unreleased
55+
if current_unreleased_level:
56+
out_metadata.unreleased_start = index
57+
unreleased_level = current_unreleased_level
5658
continue
57-
elif unreleased_level and self.parse_title_level(line) == unreleased_level:
58-
meta.unreleased_end = index
59+
60+
if unreleased_level and parsed_unreleased_level == unreleased_level:
61+
out_metadata.unreleased_end = index
5962

6063
# Try to find the latest release done
61-
parsed = self.parse_version_from_title(line)
62-
if parsed:
63-
meta.latest_version = parsed.version
64-
meta.latest_version_tag = parsed.tag
65-
meta.latest_version_position = index
64+
if parsed_version_tag := self.parse_version_from_title(line):
65+
out_metadata.latest_version = parsed_version_tag.version
66+
out_metadata.latest_version_tag = parsed_version_tag.tag
67+
out_metadata.latest_version_position = index
6668
break # there's no need for more info
67-
if meta.unreleased_start is not None and meta.unreleased_end is None:
68-
meta.unreleased_end = index
6969

70-
return meta
70+
if (
71+
out_metadata.unreleased_start is not None
72+
and out_metadata.unreleased_end is None
73+
):
74+
out_metadata.unreleased_end = len(lines)
75+
76+
return out_metadata
7177

7278
def parse_version_from_title(self, line: str) -> VersionTag | None:
7379
"""

0 commit comments

Comments
 (0)