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 54e4288

Browse files
refactor(ChangelogFormat): refactor get_metadata_from_file for better readability and better type
1 parent cc981fc commit 54e4288

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) - 1
75+
76+
return out_metadata
7177

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

0 commit comments

Comments
(0)

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