feat: aliases support in resolve and db generation

generate_db.py now reads aliases from emulator YAMLs and indexes
them in database.json by_name. resolve_local_file in common.py
tries all alias names when the primary name fails to match.

beetle_psx alt_names renamed to aliases (was not indexed before).
snes9x BS-X.bios, np2kai FONT.ROM/ide.rom/pci.rom fallbacks,
all now formally declared as aliases and indexed.

verify --all and generate_pack --all pass with 0 regressions.
This commit is contained in:
Abdessamad Derraz
2026-03-19 08:15:13 +01:00
parent 71b127efb5
commit f3db61162c
3 changed files with 243 additions and 14 deletions

View File

@@ -277,6 +277,37 @@ def _collect_all_aliases(files: dict) -> dict:
except (ImportError, ConnectionError, OSError):
pass
# Collect aliases from emulator YAMLs (aliases field on file entries)
emulators_dir = Path("emulators")
if emulators_dir.is_dir():
try:
import yaml
for emu_file in emulators_dir.glob("*.yml"):
try:
with open(emu_file) as f:
emu_config = yaml.safe_load(f) or {}
except (yaml.YAMLError, OSError):
continue
for file_entry in emu_config.get("files", []):
entry_aliases = file_entry.get("aliases", [])
if not entry_aliases:
continue
entry_name = file_entry.get("name", "")
sha1 = file_entry.get("sha1", "")
md5 = file_entry.get("md5", "")
matched = None
if sha1 and sha1 in files:
matched = sha1
elif md5 and md5 in md5_to_sha1:
matched = md5_to_sha1[md5]
elif entry_name and entry_name in name_to_sha1:
matched = name_to_sha1[entry_name]
if matched:
for alias_name in entry_aliases:
_add_alias(alias_name, matched)
except ImportError:
pass
# Identical content named differently across platforms/cores
KNOWN_ALIAS_GROUPS = [
# ColecoVision - all these are the same 8KB BIOS