diff --git a/scripts/generate_pack.py b/scripts/generate_pack.py index cd3598ab..2c173f3c 100644 --- a/scripts/generate_pack.py +++ b/scripts/generate_pack.py @@ -1230,6 +1230,7 @@ def generate_emulator_pack( required_only: bool = False, regions: list[str] | None = None, offline: bool | None = None, + platforms_dir: str | None = None, ) -> str | None: """Generate a ZIP pack for specific emulator profiles.""" all_profiles = load_emulator_profiles(emulators_dir, skip_aliases=False) @@ -1269,7 +1270,7 @@ def generate_emulator_pack( seen_hashes: set[str] = set() # SHA1 dedup for same file, different path data_dir_notices: list[str] = [] data_registry = load_data_dir_registry( - os.path.join(os.path.dirname(__file__), "..", "platforms") + platforms_dir or os.path.join(os.path.dirname(__file__), "..", "platforms") ) with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf: @@ -1500,6 +1501,7 @@ def generate_system_pack( required_only: bool = False, regions: list[str] | None = None, offline: bool | None = None, + platforms_dir: str | None = None, ) -> str | None: """Generate a ZIP pack for all emulators supporting given system IDs.""" profiles = load_emulator_profiles(emulators_dir) @@ -1549,6 +1551,7 @@ def generate_system_pack( required_only=required_only, regions=regions, offline=offline, + platforms_dir=platforms_dir, ) if result: # Rename to system-based name. Every dimension goes through the one @@ -2697,6 +2700,7 @@ def main(): required_only=args.required_only, regions=getattr(args, "regions", None), offline=args.offline, + platforms_dir=args.platforms_dir, ) if not built: sys.exit(1) @@ -2717,6 +2721,7 @@ def main(): required_only=args.required_only, regions=getattr(args, "regions", None), offline=args.offline, + platforms_dir=args.platforms_dir, ) if not built: sys.exit(1) diff --git a/tests/test_verify_listing.py b/tests/test_verify_listing.py index cbbaefce..7c3a0b47 100644 --- a/tests/test_verify_listing.py +++ b/tests/test_verify_listing.py @@ -71,5 +71,30 @@ class VerifyRefusesWhatAModeDoesNotRead(unittest.TestCase): self.assertEqual(seen, ["elsewhere"]) +class EmulatorPackReadsThePlatformsDir(unittest.TestCase): + def test_the_registry_comes_from_the_given_dir(self): + sys.path.insert(0, str(REPO_ROOT / "scripts")) + import generate_pack # noqa: PLC0415 + + seen: list[str] = [] + + def registry(path: str) -> dict: + seen.append(str(path)) + return {} + + db = {"files": {}, "indexes": {"by_name": {}, "by_md5": {}}} + out = REPO_ROOT / "tmp" / "emupack-registry" + with mock.patch.object(generate_pack, "load_data_dir_registry", registry): + generate_pack.generate_emulator_pack( + ["handy"], str(REPO_ROOT / "emulators"), db, "bios", str(out), + zip_contents={}, platforms_dir="elsewhere", + ) + for leftover in out.glob("*"): + leftover.unlink() + if out.exists(): + out.rmdir() + self.assertEqual(seen, ["elsewhere"]) + + if __name__ == "__main__": unittest.main()