mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-11 20:43:50 -06:00
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:
1 parent
52b7ee0f46
commit
bc489273a0
3 files changed
+53
-8
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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')}"
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in new issue
Block a user