fix: read a pack version past its platform part

_pack_version took the text after the last underscore of the pack name.
AmberELEC's prerelease-20261019_1835 read as 1835 and the page would
announce a version gap that does not exist. The site now removes the
platform part the builder writes (platform_pack_prefix).
This commit is contained in:
Abdessamad Derraz committed 2026-11-06 15:07:25 +01:00
1 parent 52b7ee0f46
commit bc489273a0
3 files changed
+53 -8

No files matched your search

+14 -2
View File
@@ -369,13 +369,25 @@ def _platform_pack_stem(
rep_cfg = load_platform_config(representative, platforms_dir)
version = rep_cfg.get("version", rep_cfg.get("dat_version", ""))
version_tag = f"_{_name_part(str(version))}" if version else ""
return platform_pack_prefix(group_platforms, representative, platforms_dir) + version_tag
def platform_pack_prefix(
group_platforms: list[str], representative: str, platforms_dir: str
) -> str:
"""Platform part of a pack name without the version.
The site reads a pack's version back by removing this prefix: a version
may hold an underscore (AmberELEC prerelease-20261019_1835).
"""
if len(group_platforms) <= 1:
return _name_part(rep_cfg.get("platform", representative), "_") + version_tag
rep_cfg = load_platform_config(representative, platforms_dir)
return _name_part(rep_cfg.get("platform", representative), "_")
names = [
load_platform_config(p, platforms_dir).get("platform", p)
for p in group_platforms
]
return "_".join(_name_part(n) for n in names) + version_tag
return "_".join(_name_part(n) for n in names)
def platform_list_version(config: dict, platform: str) -> str:
+25 -5
View File
@@ -642,11 +642,26 @@ def _release_date(tag: str) -> str:
return f"{moment.day} {moment.strftime('%B %Y')}"
def _pack_version(pack_name: str) -> str:
def _pack_version(pack_name: str, platforms: list[str]) -> str:
"""The platform version a pack was built for, from its name
(Batocera_43.1_BIOS_Pack.zip is 43.1)."""
(Batocera_43.1_BIOS_Pack.zip is 43.1).
Read past the platform part the builder writes, not at the last
underscore: AmberELEC_prerelease-20261019_1835 read as 1835.
"""
from generate_pack import platform_pack_prefix # noqa: PLC0415
stem = pack_name.removesuffix("_BIOS_Pack.zip")
return stem.rsplit("_", 1)[1] if "_" in stem else ""
prefix = platform_pack_prefix(
platforms, platforms[0], str(siteinputs.current().platforms)
) + "_"
return stem[len(prefix):] if stem.startswith(prefix) else ""
def _pack_platforms(platform_name: str, record: dict, pack_name: str) -> list[str]:
"""The platforms a release pack was built for, the one asked first."""
listed = list(record.get("packs", {}).get(pack_name, {}).get("platforms") or [])
return listed or [platform_name]
def release_line(platform_name: str, record: dict) -> list[str]:
@@ -665,7 +680,9 @@ def release_line(platform_name: str, record: dict) -> list[str]:
]
config = load_platform_config(platform_name, str(siteinputs.current().platforms))
page_version = str(config.get("version") or "")
pack_version = _pack_version(pack_name)
pack_version = _pack_version(
pack_name, _pack_platforms(platform_name, record, pack_name)
)
if page_version and pack_version and page_version.lstrip("v") != pack_version.lstrip("v"):
display = config.get("platform", platform_name)
lines.append(f"This pack was built for {display} {pack_version}. The command "
@@ -692,7 +709,10 @@ def setup_version(platform_name: str, record: dict | None = None) -> str:
except FileNotFoundError:
return ""
pack_name = release_record.pack_name_for(platform_name, record or {})
version = (_pack_version(pack_name) if pack_name else "") or str(config.get("version") or "")
version = (
_pack_version(pack_name, _pack_platforms(platform_name, record or {}, pack_name))
if pack_name else ""
) or str(config.get("version") or "")
if not version:
return ""
return f"{config.get('platform', platform_name)} {version.removeprefix('v')}"
+14 -1
View File
@@ -441,7 +441,8 @@ class PackNamesItsVersion(unittest.TestCase):
if not release_record.pack_for("batocera", record):
self.skipTest("release.json has no Batocera pack")
block = generate_site._pack_buttons("batocera")
version = generate_site._pack_version(release_record.pack_name_for("batocera", record))
name = release_record.pack_name_for("batocera", record)
version = generate_site._pack_version(name, ["batocera"])
self.assertIn(f"Made for Batocera {version}. "
+ generate_site.other_version("batocera"), block)
@@ -452,6 +453,18 @@ class PackNamesItsVersion(unittest.TestCase):
line = generate_site.version_line("retrobat", record, named=len(released) > 1)
self.assertEqual(line, generate_site.other_version("retrobat"))
def test_a_version_with_an_underscore_is_read_whole(self):
"""AmberELEC's prerelease-20261019_1835 read as 1835, and the page
said the pack was built for another version."""
from generate_pack import _platform_pack_stem
version = load_platform_config("amberelec", "platforms")["version"]
name = _platform_pack_stem(["amberelec"], "amberelec", "platforms") + "_BIOS_Pack.zip"
self.assertEqual(generate_site._pack_version(name, ["amberelec"]), version)
record = {"tag": "v2026.10.10", "packs": {name: {
"assets": [name], "platforms": ["amberelec"]}}}
self.assertEqual(len(generate_site.release_line("amberelec", record)), 1)
def test_another_version_is_sent_to_the_check_commands(self):
"""A ZIP reader read "Run `--check` after copying." with no command."""
line = generate_site.other_version("emudeck")