diff --git a/emulators/amiberry-7.1.1.yml b/emulators/amiberry-7.1.1.yml index dba802536..c617c4df7 100644 --- a/emulators/amiberry-7.1.1.yml +++ b/emulators/amiberry-7.1.1.yml @@ -7,7 +7,7 @@ profiled_date: "2026-11-09" source_commit: "c53d6db770a5580732a7f2bb48abcbfcd95fd0f4" pin_frozen: "AmberELEC builds this revision (AmberELEC packages/games/emulators/amiberry/package.mk:6\ \ at a21975b), KNULLI the v7.1.0 tag through its batocera submodule (batocera package/batocera/emulators/amiberry/amiberry.mk:7\ - \ at 487014d). The two read the same files: equal ROM database, folders, scan and booter, the changes\ + \ at 487014d, the commit knulli-linux 20260511 pins). The two read the same files: equal ROM database, folders, scan and booter, the changes\ \ between them being hotkeys, the GUI font and the plugins folder." pin_build: - platform: amberelec @@ -17,9 +17,9 @@ pin_build: variable: PKG_VERSION value: "c53d6db770a5580732a7f2bb48abcbfcd95fd0f4" - platform: knulli - repo: "https://github.com/batocera-linux/batocera.linux" - revision: "487014d91147610ebdd62f870009d4563ac61763" - path: "package/batocera/emulators/amiberry/amiberry.mk" + repo: "https://github.com/knulli-cfw/knulli-linux" + revision: "20260511" + path: "batocera/package/batocera/emulators/amiberry/amiberry.mk" variable: AMIBERRY_VERSION value: "v7.1.0" core_version: "7.1.1" diff --git a/emulators/amiberry-8.3.0.yml b/emulators/amiberry-8.3.0.yml index cbdad8941..3f2af0124 100644 --- a/emulators/amiberry-8.3.0.yml +++ b/emulators/amiberry-8.3.0.yml @@ -6,15 +6,9 @@ upstream: "https://github.com/tonioni/WinUAE" profiled_date: "2026-11-09" source_commit: "110ab1b08c010f8b1f873310add18cc66dae4f24" pin_frozen: "RetroBat, the only platform that ships it, installs the Windows build of the v8.3.0 tag\ - \ (RetroBat emulators/versions.xml lists amiberry 8.3.0.0 on its stable channel, RetroBat emulatorLauncher/Installer.cs:26,\ - \ 199-237 reads it). Later releases are not part of that install." -pin_build: -- platform: retrobat - repo: "https://www.retrobat.org/repo/win64" - revision: "stable" - path: "emulators/versions.xml" - variable: amiberry - value: "8.3.0.0" + \ (emulators/versions.xml on its download server lists amiberry 8.3.0.0 for the stable channel, which\ + \ emulatorLauncher/Installer.cs:26, 199-237 reads). No repository holds that list. Later releases are not\ + \ part of that install." core_version: "8.3.0" version_basis: kind: file diff --git a/scripts/check_freshness.py b/scripts/check_freshness.py index ac1e02188..4ef9e145c 100644 --- a/scripts/check_freshness.py +++ b/scripts/check_freshness.py @@ -1615,6 +1615,17 @@ def check_pin_builds( at = revision or upstream.resolve_head(repo, cache_dir, offline) lines = upstream.fetch_file(repo, at, reference["path"], cache_dir, offline) \ if at else None + if at and lines is None: + # A file of a submodule is read at the commit the + # platform's tree pins: KNULLI builds Batocera's + # amiberry package through its batocera submodule. + modules = upstream.fetch_file(repo, at, ".gitmodules", cache_dir, offline) + declared = upstream.submodule_urls("\n".join(modules or ()), repo) + if any(reference["path"].startswith(f"{p}/") for p in declared): + linked = upstream.through_gitlink(repo, at, reference["path"], + cache_dir, offline) + if linked is not None: + lines = upstream.fetch_file(*linked, cache_dir, offline) except upstream.NotCachedError: findings.append(Finding("profiles", subject, SKIPPED, local=recorded[:12], detail="offline, the build file is not cached")) diff --git a/tests/test_pin_build.py b/tests/test_pin_build.py index ecd3731bc..029216664 100644 --- a/tests/test_pin_build.py +++ b/tests/test_pin_build.py @@ -86,6 +86,28 @@ class HeldPinsReadTheirBuildFileAgain(unittest.TestCase): self.assertEqual(found["mame0278 (recalbox)"].status, cf.STALE) self.assertIn("is gone", found["mame0278 (recalbox)"].detail) + def test_a_file_of_a_submodule_is_read_at_its_gitlink(self): + """KNULLI builds Batocera's amiberry package through its batocera + submodule: the file is not in knulli-linux's own tree.""" + self._platform("10.2") + ref = {**self.REF, "path": "batocera/package/amiberry/amiberry.mk", + "variable": "AMIBERRY_VERSION", "value": "v7.1.0"} + modules = ['[submodule "batocera"]', "\tpath = batocera", + "\turl = https://github.com/batocera-linux/batocera.linux.git"] + + def fetch(repo, sha, path, *_args): + if path == ".gitmodules": + return modules + if repo.slug == "batocera-linux/batocera.linux" and sha == "c" * 40: + return ["AMIBERRY_VERSION = v7.1.0"] + return None + + profiles = {"amiberry": {"pin_frozen": "x", "pin_build": [ref]}} + with mock.patch.object(cf.upstream, "fetch_file", side_effect=fetch), \ + mock.patch.object(cf.upstream, "list_gitlinks", return_value={"batocera": "c" * 40}): + (row,) = cf.check_pin_builds(profiles, self.platforms, "cache", False) + self.assertEqual(row.status, cf.OK, row.detail) + def test_offline_and_uncached_is_skipped(self): self._platform("10.2") profiles = {"mame0278": {"pin_frozen": "x", "pin_build": [self.REF]}}