mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-04-20 15:52:35 -05:00
fix: review findings — hoist constants, cache emu profiles, renumber steps
- Hoist sev_order/sev_prio dicts to module-level constants (was rebuilt every loop iteration) - Cache emulator profiles across platforms in verify main() (was loading 260 YAMLs per platform, now loaded once) - Renumber resolve_local_file steps 1-5 (was 1,2,3,5,6 after removal) - Pass emu_profiles through verify_platform → find_undeclared_files
This commit is contained in:
+2
-2
@@ -198,7 +198,7 @@ def resolve_local_file(
|
|||||||
if primary or candidates:
|
if primary or candidates:
|
||||||
return (primary[0] if primary else candidates[0]), "exact"
|
return (primary[0] if primary else candidates[0]), "exact"
|
||||||
|
|
||||||
# 5. Name + alias fallback with md5_composite + direct MD5 per candidate
|
# 4. Name + alias fallback with md5_composite + direct MD5 per candidate
|
||||||
md5_set = set(md5_list)
|
md5_set = set(md5_list)
|
||||||
candidates = []
|
candidates = []
|
||||||
seen_paths = set()
|
seen_paths = set()
|
||||||
@@ -228,7 +228,7 @@ def resolve_local_file(
|
|||||||
primary = [p for p, _ in candidates if "/.variants/" not in p]
|
primary = [p for p, _ in candidates if "/.variants/" not in p]
|
||||||
return (primary[0] if primary else candidates[0][0]), "hash_mismatch"
|
return (primary[0] if primary else candidates[0][0]), "hash_mismatch"
|
||||||
|
|
||||||
# 6. zipped_file content match via pre-built index (last resort:
|
# 5. zipped_file content match via pre-built index (last resort:
|
||||||
# matches inner ROM MD5 across ALL ZIPs in the repo, so only use
|
# matches inner ROM MD5 across ALL ZIPs in the repo, so only use
|
||||||
# when name-based resolution failed entirely)
|
# when name-based resolution failed entirely)
|
||||||
if zipped_file and md5_list and zip_contents:
|
if zipped_file and md5_list and zip_contents:
|
||||||
|
|||||||
+17
-8
@@ -62,6 +62,9 @@ class Severity:
|
|||||||
INFO = "info" # optional missing on existence-only platform
|
INFO = "info" # optional missing on existence-only platform
|
||||||
OK = "ok" # file verified
|
OK = "ok" # file verified
|
||||||
|
|
||||||
|
_STATUS_ORDER = {Status.OK: 0, Status.UNTESTED: 1, Status.MISSING: 2}
|
||||||
|
_SEVERITY_ORDER = {Severity.OK: 0, Severity.INFO: 1, Severity.WARNING: 2, Severity.CRITICAL: 3}
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Verification functions
|
# Verification functions
|
||||||
@@ -183,6 +186,7 @@ def find_undeclared_files(
|
|||||||
config: dict,
|
config: dict,
|
||||||
emulators_dir: str,
|
emulators_dir: str,
|
||||||
db: dict,
|
db: dict,
|
||||||
|
emu_profiles: dict | None = None,
|
||||||
) -> list[dict]:
|
) -> list[dict]:
|
||||||
"""Find files needed by cores but not declared in platform config."""
|
"""Find files needed by cores but not declared in platform config."""
|
||||||
# Collect all filenames declared by this platform
|
# Collect all filenames declared by this platform
|
||||||
@@ -204,7 +208,7 @@ def find_undeclared_files(
|
|||||||
declared_dd.add(ref)
|
declared_dd.add(ref)
|
||||||
|
|
||||||
by_name = db.get("indexes", {}).get("by_name", {})
|
by_name = db.get("indexes", {}).get("by_name", {})
|
||||||
profiles = load_emulator_profiles(emulators_dir)
|
profiles = emu_profiles if emu_profiles is not None else load_emulator_profiles(emulators_dir)
|
||||||
|
|
||||||
undeclared = []
|
undeclared = []
|
||||||
seen = set()
|
seen = set()
|
||||||
@@ -247,7 +251,11 @@ def find_undeclared_files(
|
|||||||
# Platform verification
|
# Platform verification
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
def verify_platform(config: dict, db: dict, emulators_dir: str = DEFAULT_EMULATORS_DIR) -> dict:
|
def verify_platform(
|
||||||
|
config: dict, db: dict,
|
||||||
|
emulators_dir: str = DEFAULT_EMULATORS_DIR,
|
||||||
|
emu_profiles: dict | None = None,
|
||||||
|
) -> dict:
|
||||||
"""Verify all BIOS files for a platform, including cross-reference gaps."""
|
"""Verify all BIOS files for a platform, including cross-reference gaps."""
|
||||||
mode = config.get("verification_mode", "existence")
|
mode = config.get("verification_mode", "existence")
|
||||||
platform = config.get("platform", "unknown")
|
platform = config.get("platform", "unknown")
|
||||||
@@ -285,14 +293,12 @@ def verify_platform(config: dict, db: dict, emulators_dir: str = DEFAULT_EMULATO
|
|||||||
required = file_entry.get("required", True)
|
required = file_entry.get("required", True)
|
||||||
cur = result["status"]
|
cur = result["status"]
|
||||||
prev = file_status.get(dest)
|
prev = file_status.get(dest)
|
||||||
sev_order = {Status.OK: 0, Status.UNTESTED: 1, Status.MISSING: 2}
|
if prev is None or _STATUS_ORDER.get(cur, 0) > _STATUS_ORDER.get(prev, 0):
|
||||||
if prev is None or sev_order.get(cur, 0) > sev_order.get(prev, 0):
|
|
||||||
file_status[dest] = cur
|
file_status[dest] = cur
|
||||||
file_required[dest] = required
|
file_required[dest] = required
|
||||||
sev = compute_severity(cur, required, mode)
|
sev = compute_severity(cur, required, mode)
|
||||||
prev_sev = file_severity.get(dest)
|
prev_sev = file_severity.get(dest)
|
||||||
sev_prio = {Severity.OK: 0, Severity.INFO: 1, Severity.WARNING: 2, Severity.CRITICAL: 3}
|
if prev_sev is None or _SEVERITY_ORDER.get(sev, 0) > _SEVERITY_ORDER.get(prev_sev, 0):
|
||||||
if prev_sev is None or sev_prio.get(sev, 0) > sev_prio.get(prev_sev, 0):
|
|
||||||
file_severity[dest] = sev
|
file_severity[dest] = sev
|
||||||
|
|
||||||
# Count by severity
|
# Count by severity
|
||||||
@@ -301,7 +307,7 @@ def verify_platform(config: dict, db: dict, emulators_dir: str = DEFAULT_EMULATO
|
|||||||
counts[s] = counts.get(s, 0) + 1
|
counts[s] = counts.get(s, 0) + 1
|
||||||
|
|
||||||
# Cross-reference undeclared files
|
# Cross-reference undeclared files
|
||||||
undeclared = find_undeclared_files(config, emulators_dir, db)
|
undeclared = find_undeclared_files(config, emulators_dir, db, emu_profiles)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"platform": platform,
|
"platform": platform,
|
||||||
@@ -415,13 +421,16 @@ def main():
|
|||||||
parser.error("Specify --platform or --all")
|
parser.error("Specify --platform or --all")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Load emulator profiles once for cross-reference (not per-platform)
|
||||||
|
emu_profiles = load_emulator_profiles(args.emulators_dir)
|
||||||
|
|
||||||
# Group identical platforms (same function as generate_pack)
|
# Group identical platforms (same function as generate_pack)
|
||||||
groups = group_identical_platforms(platforms, args.platforms_dir)
|
groups = group_identical_platforms(platforms, args.platforms_dir)
|
||||||
all_results = {}
|
all_results = {}
|
||||||
group_results: list[tuple[dict, list[str]]] = []
|
group_results: list[tuple[dict, list[str]]] = []
|
||||||
for group_platforms, representative in groups:
|
for group_platforms, representative in groups:
|
||||||
config = load_platform_config(representative, args.platforms_dir)
|
config = load_platform_config(representative, args.platforms_dir)
|
||||||
result = verify_platform(config, db, args.emulators_dir)
|
result = verify_platform(config, db, args.emulators_dir, emu_profiles)
|
||||||
names = [load_platform_config(p, args.platforms_dir).get("platform", p) for p in group_platforms]
|
names = [load_platform_config(p, args.platforms_dir).get("platform", p) for p in group_platforms]
|
||||||
group_results.append((result, names))
|
group_results.append((result, names))
|
||||||
for p in group_platforms:
|
for p in group_platforms:
|
||||||
|
|||||||
Reference in New Issue
Block a user