refactor: quality audit fixes, honest verification reporting

- batocera_scraper: fix OrderedDict parsing for ast.literal_eval
- auto_fetch: fix TypeError when sha1/md5 is None
- verify: filter non-ZIP files for zipped_file entries (F2)
- verify: distinguish ZIP read errors from hash mismatches (F5)
- generate_pack: track seen_destinations with source hash (F7)

Batocera ep64/ep128.zip now correctly reported as MISSING
instead of false UNTESTED (resolved to .rom instead of .zip)
This commit is contained in:
Abdessamad Derraz
2026-03-17 15:35:30 +01:00
parent 5ab82a7898
commit 8d81aee235
4 changed files with 22 additions and 13 deletions

View File

@@ -263,7 +263,7 @@ def generate_pack(
missing_files = []
untested_files = []
user_provided = []
seen_destinations = set()
seen_destinations = {}
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
for sys_id, system in sorted(config.get("systems", {}).items()):
@@ -279,7 +279,7 @@ def generate_pack(
dedup_key = full_dest
if dedup_key in seen_destinations:
continue
seen_destinations.add(dedup_key)
seen_destinations[dedup_key] = file_entry.get("sha1") or file_entry.get("md5") or ""
storage = file_entry.get("storage", "embedded")