mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-06 01:53:56 -06:00
fix: link every platform's launcher citations
This commit is contained in:
1 parent
ba150de469
commit
ecb56c43e5
3 files changed
+26
-13
No files matched your search
@@ -3401,20 +3401,14 @@ def _served_line(f: dict) -> str:
|
||||
f"(sha1 `{sha1[:8]}`)")
|
||||
|
||||
|
||||
# Platforms whose launcher records are read from the repository and revision
|
||||
# of their BIOS list: batocera_scraper reads configgen at its tag,
|
||||
# retrobat_scraper reads emulatorLauncher at the list's commit
|
||||
# (launcher_revision). The others read another repository.
|
||||
_LAUNCHERS_IN_LIST_REPO = frozenset({"batocera", "retrobat"})
|
||||
|
||||
|
||||
def _launcher_refs(platform: str, config: dict) -> dict[str, list[str]]:
|
||||
def _launcher_refs(config: dict) -> dict[str, list[str]]:
|
||||
"""Entry name, casefolded -> each launcher record that opens it, rendered."""
|
||||
from launchers import _names as launcher_names
|
||||
from sitesources import launcher_ref_markdown, list_source
|
||||
|
||||
source = (list_source(str(config.get("source") or ""))
|
||||
if platform in _LAUNCHERS_IN_LIST_REPO else None)
|
||||
# Every scraper reads its launchers in the repository and at the revision
|
||||
# of the list it scrapes, so `source` pins each source_ref.
|
||||
source = list_source(str(config.get("source") or ""))
|
||||
found: dict[str, list[str]] = {}
|
||||
for record in config.get("launchers") or []:
|
||||
if not isinstance(record, dict) or not record.get("source_ref"):
|
||||
@@ -3626,7 +3620,7 @@ def _render_platform_systems(
|
||||
# Per-system detail sections (collapsible for large platforms)
|
||||
use_collapsible = len(by_system) > 10
|
||||
by_system_declared = _declared_by_system(config_files)
|
||||
launched = _launcher_refs(platform[0] if platform else "", config or {})
|
||||
launched = _launcher_refs(config or {})
|
||||
|
||||
sections: list[dict] = []
|
||||
for sys_id, files in sorted(by_system.items()):
|
||||
|
||||
@@ -129,13 +129,32 @@ class EvidenceLinksItsSource(unittest.TestCase):
|
||||
evidence = {"read_by": [{"emulator": "launcher", "proof": "launcher",
|
||||
"entries": [], "runs_system": True}]}
|
||||
config = load_platform_config("batocera", PLATFORMS)
|
||||
launched = generate_site._launcher_refs("batocera", config)["scph1001.bin"]
|
||||
launched = generate_site._launcher_refs(config)["scph1001.bin"]
|
||||
text = generate_site._category_evidence_md(evidence, launched)
|
||||
self.assertNotIn("(by launcher)", text)
|
||||
self.assertIn("https://github.com/batocera-linux/batocera.linux/blob/batocera-43.1/"
|
||||
"package/batocera/core/batocera-configgen/", text)
|
||||
self.assertIn("duckstationGenerator.py:115-136", text)
|
||||
|
||||
def test_every_platform_links_its_launchers(self):
|
||||
"""Only Batocera and RetroBat were linked: Recalbox, ROCKNIX, EmuDeck,
|
||||
RetroPie and RetroDECK read their launchers in the list's repository
|
||||
too, and their citations came out as plain code."""
|
||||
checked = 0
|
||||
for path in sorted(Path(PLATFORMS).glob("*.yml")):
|
||||
if not path.stem[0].isalpha():
|
||||
continue
|
||||
config = load_platform_config(path.stem, PLATFORMS)
|
||||
if not config.get("launchers"):
|
||||
continue
|
||||
with self.subTest(platform=path.stem):
|
||||
rendered = [text for texts in generate_site._launcher_refs(config).values()
|
||||
for text in texts]
|
||||
self.assertTrue(rendered)
|
||||
self.assertFalse([t for t in rendered if " at `" in t])
|
||||
checked += 1
|
||||
self.assertGreaterEqual(checked, 7)
|
||||
|
||||
def test_a_launcher_in_another_repository_is_not_linked(self):
|
||||
source = list_source("https://gitlab.com/recalbox/recalbox/-/raw/10.1.1/x/es_bios.xml")
|
||||
self.assertEqual(launcher_ref_markdown(None, "a/b.py:3"), "`b.py:3`")
|
||||
|
||||
@@ -423,7 +423,7 @@ launchers:
|
||||
| `fails_scope` | `emulator` when the failure needs every record of the emulator to come up empty |
|
||||
| `depends_on_option` | Options or conditions that decide whether the record applies |
|
||||
| `device` | Devices whose shipped config the record reads, set only where a package ships configs that differ between devices |
|
||||
| `source_ref` | `path:lines` at the revision `source` pins |
|
||||
| `source_ref` | `path:lines` in the repository and at the revision `source` pins, which the site links |
|
||||
|
||||
Batocera's generators are read with `ast`, RetroBat's C# generators as text.
|
||||
ROCKNIX and EmuDeck launch from shell scripts and configs shipped with each
|
||||
|
||||
Reference in new issue
Block a user