Skip to content

Commit da46193

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

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

commitizen/version_schemes.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,54 @@ 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>
166+
(?! # negative lookahead to prevent matching post, rev, r, dev
167+
[-_\.]?
168+
(post|rev|r|dev)
169+
[-_\.]?
170+
([0-9]+)?
171+
$)
172+
[a-z]+? # match any letters to support semver
173+
)
174+
[-_\.]?
175+
(?P<pre_n>[0-9]+)?
176+
)?
177+
(?P<post> # post release
178+
(?:-(?P<post_n1>[0-9]+))
179+
|
180+
(?:
181+
[-_\.]?
182+
(?P<post_l>post|rev|r)
183+
[-_\.]?
184+
(?P<post_n2>[0-9]+)?
185+
)
186+
)?
187+
(?P<dev> # dev release
188+
[-_\.]?
189+
(?P<dev_l>dev)
190+
[-_\.]?
191+
(?P<dev_n>[0-9]+)?
192+
)?
193+
)
194+
(?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version
195+
\s*$"""
196+
197+
156198
class BaseVersion(_BaseVersion):
157199
"""
158200
A base class implementing the `VersionProtocol` for PEP440-like versions.
159201
"""
160202

203+
_regex: re.Pattern = re.compile(_VERSION_PATTERN, re.VERBOSE | re.IGNORECASE)
161204
parser: ClassVar[re.Pattern] = _DEFAULT_VERSION_PARSER
162205
"""Regex capturing this version scheme into a `version` group"""
163206

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)