Skip to content

Commit cb3a4de

Browse files
Make untagged versions PEP 440-compliant (#394)
1 parent 93e5b8e commit cb3a4de

2 files changed

Lines changed: 35 additions & 3 deletions

File tree

release.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -470,9 +470,13 @@ def tweak_patchlevel(
470470
"rc": "PY_RELEASE_LEVEL_GAMMA",
471471
"f": "PY_RELEASE_LEVEL_FINAL",
472472
}[tag.level]
473-
new_constants = template.format(
474-
tag=tag, level_def=level_def, plus=done and "+" or ""
475-
)
473+
if done:
474+
# 3.15+ uses "+dev" for PEP 440 local-version compliance;
475+
# 3.14 and earlier keep the bare "+" suffix.
476+
plus = "+dev" if tag.as_tuple() >= (3, 15) else "+"
477+
else:
478+
plus = ""
479+
new_constants = template.format(tag=tag, level_def=level_def, plus=plus)
476480
if tag.as_tuple() >= (3, 7, 0, "a", 3):
477481
new_constants = new_constants.expandtabs()
478482
constant_replace(filename, new_constants)

tests/test_release.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,34 @@ def test_tweak_patchlevel(tmp_path: Path) -> None:
102102
assert expected in new_contents
103103

104104

105+
@pytest.mark.parametrize(
106+
["test_tag", "expected_py_version"],
107+
[
108+
# 3.14 and earlier keep the bare "+" suffix.
109+
("3.14.0b2", '#define PY_VERSION "3.14.0b2+"'),
110+
# 3.15+ uses "+dev" for PEP 440 local-version compliance.
111+
("3.15.0b1", '#define PY_VERSION "3.15.0b1+dev"'),
112+
("3.16.0a1", '#define PY_VERSION "3.16.0a1+dev"'),
113+
],
114+
)
115+
def test_tweak_patchlevel_done(
116+
tmp_path: Path, test_tag: str, expected_py_version: str
117+
) -> None:
118+
# Arrange
119+
tag = release.Tag(test_tag)
120+
121+
original_patchlevel_file = Path(__file__).parent / "patchlevel.h"
122+
patchlevel_file = tmp_path / "patchlevel.h"
123+
patchlevel_file.write_text(original_patchlevel_file.read_text())
124+
125+
# Act
126+
release.tweak_patchlevel(tag, filename=str(patchlevel_file), done=True)
127+
128+
# Assert
129+
new_contents = patchlevel_file.read_text()
130+
assert expected_py_version in new_contents
131+
132+
105133
@pytest.mark.parametrize(
106134
[
107135
"test_tag",

0 commit comments

Comments
 (0)