From f67642095cea7356e2219cf05c40c9391b760ea6 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Mon, 10 Aug 2026 16:55:48 +0200 Subject: [PATCH] feat: self-check a profile already on head --- emulators/fbneo.yml | 85 +++++++++++++++++--------------------- scripts/profile_sync.py | 7 +++- tests/test_profile_sync.py | 19 +++++++++ 3 files changed, 64 insertions(+), 47 deletions(-) diff --git a/emulators/fbneo.yml b/emulators/fbneo.yml index 48babba4..5beab0c2 100644 --- a/emulators/fbneo.yml +++ b/emulators/fbneo.yml @@ -5,7 +5,7 @@ source: "https://github.com/libretro/FBNeo" upstream: "https://github.com/finalburnneo/FBNeo" logo: "https://raw.githubusercontent.com/finalburnneo/FBNeo/master/projectfiles/xcode/Emulator/Assets.xcassets/AppIcon.appiconset/icon_512.png" profiled_date: "2026-03-23" -source_commit: "b267b79504366def21cefb08215e68df93310dba" +source_commit: "ef1f64b7023bc511858e96b8961f99c18a09f112" core_version: "v1.0.0.2" display_name: "Arcade (FinalBurn Neo)" cores: @@ -100,7 +100,7 @@ files: size: 131072 crc32: "9036d879" note: "MVS Asia/Europe ver. 5 (1 slot)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1645" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1625" - name: "sp-s.sp1" archive: neogeo.zip @@ -109,7 +109,7 @@ files: size: 131072 crc32: "c7f2fa45" note: "MVS Asia/Europe ver. 3 (4 slot)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1646" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1626" - name: "sp-u2.sp1" aliases: ["usa_2slt.bin"] @@ -119,7 +119,7 @@ files: size: 131072 crc32: "e72943de" note: "MVS USA ver. 5 (2 slot)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1647" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1627" - name: "sp1-u2" archive: neogeo.zip @@ -128,7 +128,7 @@ files: size: 131072 crc32: "62f021f4" note: "MVS USA ver. 5 (4 slot)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1648" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1628" - name: "sp-e.sp1" archive: neogeo.zip @@ -137,7 +137,7 @@ files: size: 131072 crc32: "2723a5b5" note: "MVS USA ver. 5 (6 slot)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1649" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1629" - name: "sp1-u4.bin" archive: neogeo.zip @@ -146,7 +146,7 @@ files: size: 131072 crc32: "1179a30f" note: "MVS USA (U4)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1650" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1630" - name: "sp1-u3.bin" archive: neogeo.zip @@ -155,7 +155,7 @@ files: size: 131072 crc32: "2025b7a2" note: "MVS USA (U3)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1651" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1631" - name: "vs-bios.rom" archive: neogeo.zip @@ -164,7 +164,7 @@ files: size: 131072 crc32: "f0e8f27d" note: "MVS Japan ver. 6" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1652" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1632" - name: "sp-j2.sp1" archive: neogeo.zip @@ -173,7 +173,7 @@ files: size: 131072 crc32: "acede59c" note: "MVS Japan ver. 5" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1653" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1633" - name: "sp1.jipan.1024" archive: neogeo.zip @@ -182,7 +182,7 @@ files: size: 131072 crc32: "9fb0abe4" note: "MVS Japan ver. 3 (4 slot)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1654" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1634" - name: "sp-45.sp1" archive: neogeo.zip @@ -191,7 +191,7 @@ files: size: 524288 # 0x80000 crc32: "03cc9f6a" note: "NEO-MVH MV1C (Asia)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1615" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1635" - name: "sp-j3.sp1" archive: neogeo.zip @@ -200,7 +200,7 @@ files: size: 524288 crc32: "486cb450" note: "NEO-MVH MV1C (Japan)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1656" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1636" - name: "japan-j3.bin" archive: neogeo.zip @@ -209,7 +209,7 @@ files: size: 131072 crc32: "dff6d41f" note: "MVS Japan (J3)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1657" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1637" - name: "sp1-j3.bin" archive: neogeo.zip @@ -218,7 +218,7 @@ files: size: 131072 crc32: "fbc6d469" note: "MVS Japan (J3, alt)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1618" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1638" # AES BIOS ROMs (not in MAME ROM_VERIFY builds) - name: "neo-po.bin" @@ -228,7 +228,7 @@ files: size: 131072 crc32: "16d0c132" note: "AES Japan" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1620" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1640" - name: "neo-epo.bin" archive: neogeo.zip @@ -237,7 +237,7 @@ files: size: 131072 crc32: "d27a71f1" note: "AES Asia" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1621" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1641" - name: "neodebug.bin" archive: neogeo.zip @@ -246,7 +246,7 @@ files: size: 131072 crc32: "698ebb7d" note: "Development Kit BIOS" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1622" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1642" - name: "sp-1v1_3db8c.bin" archive: neogeo.zip @@ -255,7 +255,7 @@ files: size: 131072 crc32: "162f0ebe" note: "Deck ver. 6 (Git Ver 1.3)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1668" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1648" # Universe BIOS (third-party, multiple versions) - name: "uni-bios_4_0.rom" @@ -265,7 +265,7 @@ files: size: 131072 crc32: "a7aab458" note: "Universe BIOS ver. 4.0 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1669" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1649" - name: "uni-bios_3_3.rom" archive: neogeo.zip @@ -274,7 +274,7 @@ files: size: 131072 crc32: "24858466" note: "Universe BIOS ver. 3.3 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1670" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1650" - name: "uni-bios_3_2.rom" archive: neogeo.zip @@ -292,7 +292,7 @@ files: size: 131072 crc32: "0c58093f" note: "Universe BIOS ver. 3.1 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1672" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1652" - name: "uni-bios_3_0.rom" archive: neogeo.zip @@ -301,7 +301,7 @@ files: size: 131072 crc32: "a97c89a9" note: "Universe BIOS ver. 3.0 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1673" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1653" - name: "uni-bios_2_3.rom" archive: neogeo.zip @@ -310,7 +310,7 @@ files: size: 131072 crc32: "27664eb5" note: "Universe BIOS ver. 2.3 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1674" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1654" - name: "uni-bios_2_3o.rom" archive: neogeo.zip @@ -319,7 +319,7 @@ files: size: 131072 crc32: "601720ae" note: "Universe BIOS ver. 2.3 older (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1675" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1655" - name: "uni-bios_2_2.rom" archive: neogeo.zip @@ -337,7 +337,7 @@ files: size: 131072 crc32: "8dabf76b" note: "Universe BIOS ver. 2.1 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1677" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1657" - name: "uni-bios_2_0.rom" archive: neogeo.zip @@ -346,7 +346,7 @@ files: size: 131072 crc32: "0c12c2ad" note: "Universe BIOS ver. 2.0 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1678" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1658" - name: "uni-bios_1_3.rom" archive: neogeo.zip @@ -364,7 +364,7 @@ files: size: 131072 crc32: "4fa698e9" note: "Universe BIOS ver. 1.2 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1680" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1660" - name: "uni-bios_1_2o.rom" archive: neogeo.zip @@ -373,7 +373,7 @@ files: size: 131072 crc32: "e19d3ce9" note: "Universe BIOS ver. 1.2 older (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1681" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1661" - name: "uni-bios_1_1.rom" archive: neogeo.zip @@ -382,7 +382,7 @@ files: size: 131072 crc32: "5dda0d84" note: "Universe BIOS ver. 1.1 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1682" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1662" - name: "uni-bios_1_0.rom" archive: neogeo.zip @@ -391,7 +391,7 @@ files: size: 131072 crc32: "0ce453a0" note: "Universe BIOS ver. 1.0 (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1683" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1663" - name: "neopen.sp1" archive: neogeo.zip @@ -400,7 +400,7 @@ files: size: 131072 crc32: "cb915e76" note: "NeoOpen BIOS v0.1 beta (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1685" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1665" # Neo Geo shared ROMs (always required) - name: "sm1.sm1" @@ -428,7 +428,7 @@ files: size: 131072 crc32: "5a86cff2" note: "Zoom lookup table" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1694" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1674" # ------------------------------------------------------- # Neo Geo Trackball BIOS (for irrmaze) @@ -440,7 +440,7 @@ files: size: 131072 crc32: "853e6b96" note: "Trackball BIOS / Asia MV1B 263" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1784" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1764" - name: "236-bios_japan_hack.sp1" archive: neogeo.zip @@ -449,7 +449,7 @@ files: size: 131072 crc32: "02bf4426" note: "Trackball BIOS / Japan (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1785" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1765" # ------------------------------------------------------- # Neo Geo PCB BIOS (for ms5pcb, svcpcb, kf2k3pcb) @@ -470,7 +470,7 @@ files: size: 524288 crc32: "148dd727" note: "PCB BIOS for KOF 2003 PCB" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1919" + source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1899" # ------------------------------------------------------- # Neo Geo CDZ (neocdz.zip) @@ -1306,7 +1306,7 @@ files: size: 8192 # 0x2000 crc32: "85c2afc5" note: "Z80 code" - source_ref: "src/burn/drv/konami/d_nemesis.cpp:4530" + source_ref: "src/burn/drv/konami/d_nemesis.cpp:4528" - name: "400a1.2b" archive: bubsys.zip @@ -1315,7 +1315,7 @@ files: size: 256 # 0x100 crc32: "5827b1e8" note: "K005289 wavetable 1" - source_ref: "src/burn/drv/konami/d_nemesis.cpp:4532" + source_ref: "src/burn/drv/konami/d_nemesis.cpp:4530" - name: "400a2.1b" archive: bubsys.zip @@ -1324,7 +1324,7 @@ files: size: 256 crc32: "2f44f970" note: "K005289 wavetable 2" - source_ref: "src/burn/drv/konami/d_nemesis.cpp:4533" + source_ref: "src/burn/drv/konami/d_nemesis.cpp:4531" # ------------------------------------------------------- # Sega ISG System (isgsm.zip) @@ -1503,13 +1503,6 @@ files: crc32: "1d90517c" source_ref: "src/burn/drv/pst90s/d_suprnova.cpp:1865" - - name: "mcu" - archive: bubsys.zip - required: true - size: 4096 - crc32: "00000000" - source_ref: "src/burn/drv/konami/d_nemesis.cpp:4535" - - name: "gba_bios.bin" archive: gba.zip required: true diff --git a/scripts/profile_sync.py b/scripts/profile_sync.py index ac0a181f..4a3eeee6 100644 --- a/scripts/profile_sync.py +++ b/scripts/profile_sync.py @@ -880,7 +880,10 @@ def build_report( slug = view.repo.slug if view is not primary else None return slug, upstream.raw_url(view.repo, view.head, actual), actual - if report.pinned_tag: + # Comparing a revision with itself anchors every ref whatever it cites, so + # a profile already sitting on HEAD is judged on self-consistency instead. + self_check = bool(report.pinned_tag) or primary.pin == primary.head + if self_check: staged = [ (entry_name, ref, [ verify_at_pin(part, fetch(PIN, part.path), tokens) @@ -965,6 +968,8 @@ def format_report(report: ProfileReport, changed_only: bool = False) -> str: f" pinned to tag {report.pinned_tag}: checked against its own " "revision, not against HEAD" ) + elif report.pin and report.pin == report.head: + lines.append(" pin is HEAD: checked for self-consistency") if report.skipped: lines.append(f" skipped: {report.skipped}") return "\n".join(lines) diff --git a/tests/test_profile_sync.py b/tests/test_profile_sync.py index d625df7a..6912ada1 100644 --- a/tests/test_profile_sync.py +++ b/tests/test_profile_sync.py @@ -995,6 +995,25 @@ class TestBuildReport(unittest.TestCase): profile["core_version"] = version return profile + def test_a_pin_equal_to_head_is_checked_for_self_consistency(self): + # The cited line does not carry the declared value, which a comparison + # of a revision with itself could never reveal. + self.files[("pinsha", "a.c")] = ["x", "unrelated"] + self.files[("headsha", "a.c")] = ["x", "unrelated"] + profile = self._profile(["a.c:2"]) + profile["source_commit"] = "headsha" + profile["files"][0]["crc32"] = "deadbeef" + report = build_report("test", profile, self.dir) + self.assertEqual(report.entries[0].status, "CHANGED") + + def test_a_pin_equal_to_head_accepts_a_ref_on_its_value(self): + self.files[("headsha", "a.c")] = ["x", 'rom("deadbeef")'] + profile = self._profile(["a.c:2"]) + profile["source_commit"] = "headsha" + profile["files"][0]["crc32"] = "deadbeef" + report = build_report("test", profile, self.dir) + self.assertEqual(report.entries[0].status, "ANCHORED") + def test_pin_on_the_declared_version_tag_is_flagged(self): self.files[("pinsha", "a.c")] = ["x", "hit"] self.files[("headsha", "a.c")] = ["x", "hit"]