Skip to content

Commit f592f76

Browse files
fix: version back compat
1 parent f71e648 commit f592f76

File tree

2 files changed

+63
-9
lines changed

2 files changed

+63
-9
lines changed

pyproject.toml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: MIT
22

33
[build-system]
4-
requires = ["hatchling", "versioningit>=3.3.0"]
4+
requires = ["hatchling", "versioningit>=3.3.0,<4.0", "packaging"]
55
build-backend = "hatchling.build"
66

77
[project]
@@ -128,6 +128,11 @@ include = [
128128
]
129129
artifacts = ["disnake/_version.py"]
130130

131+
[tool.hatch.build.targets.sdist]
132+
include = [
133+
"scripts/versioning.py"
134+
]
135+
131136
[tool.hatch.version]
132137
source = "versioningit"
133138

@@ -140,9 +145,8 @@ distance = "{base_version}+{distance}.{vcs}{rev}"
140145
dirty = "{base_version}+d{build_date:%Y%m%d}"
141146
distance-dirty = "{base_version}.a{distance}+{vcs}{rev}.d{build_date:%Y%m%d}"
142147

143-
[tool.versioningit.template-fields.version-tuple]
144-
split-on = '^(\d+)\.(\d+)\.(\d+)\.([a-zA-Z])(\d+)(?:.\d+)?'
145-
148+
[tool.versioningit.template-fields]
149+
method = { module = "scripts.versioning", value = "template_fields"}
146150

147151
[tool.versioningit.write]
148152
file = "disnake/_version.py"
@@ -161,11 +165,7 @@ class VersionInfo(NamedTuple):
161165
releaselevel: Literal["alpha", "beta", "candidate", "final"]
162166
serial: int
163167
164-
165-
# fmt: off
166-
version_info: VersionInfo = VersionInfo(*{version_tuple}[:5])
167-
# fmt: on
168-
168+
version_info: VersionInfo = VersionInfo{version_tuple}
169169
"""
170170

171171
[tool.ruff]

scripts/versioning.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# SPDX-License-Identifier: MIT
2+
3+
import copy
4+
from typing import Any, Dict, Optional
5+
6+
import packaging.version
7+
import versioningit
8+
9+
10+
def template_fields(
11+
*,
12+
version: str,
13+
description: Optional[versioningit.VCSDescription],
14+
base_version: Optional[str],
15+
next_version: Optional[str],
16+
params: Dict[str, Any],
17+
) -> Dict[str, Any]:
18+
"""Implements the ``"basic"`` ``template-fields`` method"""
19+
params = copy.deepcopy(params)
20+
parsed_version = packaging.version.parse(version)
21+
fields: Dict[str, Any] = {}
22+
if description is not None:
23+
fields.update(description.fields)
24+
fields["branch"] = description.branch
25+
if base_version is not None:
26+
fields["base_version"] = base_version
27+
if next_version is not None:
28+
fields["next_version"] = next_version
29+
fields["version"] = version
30+
31+
releaselevels = {
32+
"a": "alpha",
33+
"b": "beta",
34+
"rc": "candidate",
35+
"": "final",
36+
}
37+
38+
if parsed_version.pre:
39+
releaselevel = releaselevels.get(parsed_version.pre[0], "final")
40+
else:
41+
releaselevel = "final"
42+
43+
fields["version_tuple"] = (
44+
parsed_version.major,
45+
parsed_version.minor,
46+
parsed_version.micro,
47+
releaselevel,
48+
parsed_version.dev or 0,
49+
)
50+
try:
51+
fields["normalized_version"] = str(packaging.version.Version(version))
52+
except ValueError:
53+
fields["normalized_version"] = version
54+
return fields

0 commit comments

Comments
 (0)