Skip to content

Commit b34adcc

Browse files
committed
fix(BaseVersion): support more tag format
1 parent 88540f8 commit b34adcc

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

commitizen/version_schemes.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,46 @@ def bump(
153153
VersionScheme: TypeAlias = type[VersionProtocol]
154154

155155

156+
# See https://github.com/pypa/packaging/blob/14b83e15dbb9caa87c63646ba7808b2b5e460ce6/src/packaging/version.py#L117
157+
# TODO: add more test cases for this pattern
158+
_VERSION_PATTERN = r"""^\s*
159+
v?
160+
(?:
161+
(?:(?P<epoch>[0-9]+)!)? # epoch
162+
(?P<release>[0-9]+(?:\.[0-9]+)*) # release segment
163+
(?P<pre> # pre-release
164+
[-_\.]?
165+
(?P<pre_l>(?![-_\.]?(post|rev|r|dev)[-_\.]?$)[a-zA-Z]+?)
166+
[-_\.]?
167+
(?P<pre_n>[0-9]+)?
168+
)?
169+
(?P<post> # post release
170+
(?:-(?P<post_n1>[0-9]+))
171+
|
172+
(?:
173+
[-_\.]?
174+
(?P<post_l>post|rev|r)
175+
[-_\.]?
176+
(?P<post_n2>[0-9]+)?
177+
)
178+
)?
179+
(?P<dev> # dev release
180+
[-_\.]?
181+
(?P<dev_l>dev)
182+
[-_\.]?
183+
(?P<dev_n>[0-9]+)?
184+
)?
185+
)
186+
(?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version
187+
\s*$"""
188+
189+
156190
class BaseVersion(_BaseVersion):
157191
"""
158192
A base class implementing the `VersionProtocol` for PEP440-like versions.
159193
"""
160194

195+
_regex: re.Pattern = re.compile(_VERSION_PATTERN, re.VERBOSE | re.IGNORECASE)
161196
parser: ClassVar[re.Pattern] = _DEFAULT_VERSION_PARSER
162197
"""Regex capturing this version scheme into a `version` group"""
163198

tests/test_version_scheme_semver.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@
6464
(("1.0.0alpha1", None, "alpha", 0, None), "1.0.0-a2"),
6565
(("1", None, "rc", 0, None), "1.0.0-rc0"),
6666
(("1.0.0rc1+e20d7b57f3eb", "PATCH", None, 0, None), "1.0.0"),
67-
(("1.0.0-reallyweird", "PATCH", "reallyweird", 0, None), "1.0.0"),
67+
(("1.0.0-reallyweird", "PATCH", "reallyweird", 0, None), "1.0.0-reallyweird1"),
68+
(("v0.7.1-release", "PATCH", "release", 0, None), "0.7.1-release1"),
69+
(("v0.0.1-SNAPSHOT", "PATCH", "SNAPSHOT", 0, None), "0.0.1-snapshot1"),
6870
]
6971

7072
# test driven development

tests/test_version_scheme_semver2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
(("1.0.0-alpha.1", None, "alpha", 0, None), "1.0.0-alpha.2"),
6767
(("1", None, "rc", 0, None), "1.0.0-rc.0"),
6868
(("1.0.0-rc.1+e20d7b57f3eb", "PATCH", None, 0, None), "1.0.0"),
69-
(("1.0.0-reallyweird", "PATCH", "reallyweird", 0, None), "1.0.0"),
69+
(("1.0.0-reallyweird", "PATCH", "reallyweird", 0, None), "1.0.0-reallyweird.1"),
7070
]
7171

7272
# test driven development

0 commit comments

Comments
 (0)