fix: reduce emulator packs by region after required-only

This commit is contained in:
Abdessamad Derraz committed 2026-10-06 09:13:15 +02:00
1 parent f159d35f18
commit af030fdd6d
3 files changed
+26 -3

No files matched your search

+3 -1
View File
@@ -1257,7 +1257,9 @@ def generate_emulator_pack(
os.makedirs(output_dir, exist_ok=True)
region_drops: set[str] = (
emulator_region_drops(selected, standalone, regions) if regions else set()
emulator_region_drops(selected, standalone, regions, required_only)
if regions
else set()
)
total_files = 0
+8 -2
View File
@@ -709,7 +709,10 @@ def platform_region_groups(
return groups, extra_dests
def emulator_region_drops(
selected: list[tuple[str, dict]], standalone: bool, regions: list[str]
selected: list[tuple[str, dict]],
standalone: bool,
regions: list[str],
required_only: bool = False,
) -> set[str]:
"""Destinations an emulator-mode `--region` withdraws.
@@ -726,7 +729,10 @@ def emulator_region_drops(
region_groups: dict[str, list[tuple[str, str]]] = {}
for emu_name, profile in sorted(selected):
structure = profile.get("pack_structure")
for fe in filter_files_by_mode(profile.get("files", []), standalone):
# Decided over what the pack keeps, as on the platform side: an
# optional winner removed afterwards left its slot empty.
entries = filter_files_by_mode(profile.get("files", []), standalone)
for fe in _kept(entries, required_only):
dest = _resolve_destination(fe, structure, standalone)
if dest:
group_id = _emulator_region_group(emu_name, profile, fe)
+15
View File
@@ -42,5 +42,20 @@ class RequiredOnlyBeforeRegion(unittest.TestCase):
self.assertIn("required_only", {kw.arg for kw in call.keywords})
class EmulatorModeToo(unittest.TestCase):
"""--emulator mednafen_pce_fast --region us --required-only shipped 0 files:
the optional US cards won the group, then --required-only removed them."""
def test_the_required_card_survives(self):
from packextras import emulator_region_drops # noqa: PLC0415
profile = {"systems": ["nec-pc-engine"], "files": [
{"name": "syscard3.pce", "required": True, "region": ["japan"]},
{"name": "syscard3u.pce", "required": False, "region": ["north-america"]},
]}
drops = emulator_region_drops([("pce", profile)], False, ["north-america"], True)
self.assertNotIn("syscard3.pce", drops)
if __name__ == "__main__":
unittest.main()