From 7ff8f17808fd5ef76fd73f92450ad4c80885bd81 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Wed, 11 Nov 2026 13:27:00 +0100 Subject: [PATCH] feat: profile RetroPie's AdvanceMAME tip build RetroPie clones amadvance/advancemame at the branch tip with no revision (scriptmodules/emulators/advmame.sh:16, 39-41 at 427e762), so advmame is profiled at 96237a5 (v5.0-484), built_by retropie and held by pin_follows. RetroPie's advmame now resolves to it, advancemame keeping EmuELEC, AmberELEC and Recalbox. The MAME workflow at 96237a5: 28 BIOS roots registered in mame/mamedriv.c (macs2bios is not), the eight ZN roots under their MAME names (coh1000c, coh3002c, coh1002m, coh1000t, coh1002e, coh1001l, coh1000w, coh1000a), modern Neo Geo members, coh1000w's CAT702, and 15 device archives that BIOS_LOAD reads first (atarisy1, coh3002t, m1comm, midssio, namcoc65/68/69/71/74, s_smp, saa5050, sente6vb, sns_dsp1bleg, t5182, v4bios). bctvidbs declares no ROM of its own. Three laserdisc player programs are opened by name outside any ROM list, with a fatal length, CRC32 and SHA1 check: pr8210, 22vp931 and simutrek. pin_build accepts pin_follows in the schema, and bump_commit advances a built_by profile that follows the tip. Manifests: RetroPie gains 24 archives at its BIOS root, the ZN ones under their new names, and nss.zip moves to the copy holding nss-c.dat and nss-ic14.02. The other platforms do not change. verify --all keeps its counts. profile_sync: 0 to review. --- emulators/advancemame.yml | 1 - emulators/advmame.yml | 1274 ++++++++++++++++++++++++++++++++++ schemas/emulator.schema.json | 5 +- scripts/profile_sync.py | 5 +- tests/test_pin_build.py | 6 + tests/test_profile_sync.py | 26 +- 6 files changed, 1311 insertions(+), 6 deletions(-) create mode 100644 emulators/advmame.yml diff --git a/emulators/advancemame.yml b/emulators/advancemame.yml index 5b98a09fa..c1960a05c 100644 --- a/emulators/advancemame.yml +++ b/emulators/advancemame.yml @@ -44,7 +44,6 @@ mode: standalone cores: - advancemame - - advmame - "AdvanceMame" systems: diff --git a/emulators/advmame.yml b/emulators/advmame.yml new file mode 100644 index 000000000..08d2684ea --- /dev/null +++ b/emulators/advmame.yml @@ -0,0 +1,1274 @@ +emulator: AdvanceMAME master +type: standalone +core_classification: enhanced_fork +source: "https://github.com/amadvance/advancemame" +upstream: "https://www.mamedev.org" +profiled_date: "2026-11-11" +source_commit: "96237a5f97a61bb9ae424536dc4223de26afce04" +core_version: "v5.0-484-g96237a5" +version_basis: + kind: tag + match: "v*" + tag: "v5.0" + distance: 484 +mame_version: "0.106" +display_name: "Arcade (AdvanceMAME master)" +pin_follows: "RetroPie, the only platform that ships this build, clones the branch tip at no fixed revision (RetroPie scriptmodules/emulators/advmame.sh:16, 39-41)." +pin_build: + - platform: retropie + repo: "https://github.com/RetroPie/RetroPie-Setup" + revision: "427e76216633591861791cfb28807ac1039c5ea8" + path: "scriptmodules/emulators/advmame.sh" + variable: rp_module_repo + value: "git https://github.com/amadvance/advancemame" +mode: standalone + +cores: + - advmame + +built_by: + - retropie + +systems: + - snk-neogeo-mvs + - igs-pgm + - sega-stv + - sega-megaplay + - sega-megatech + - deco-cassette + - nintendo-playch10 + - nintendo-nss + - super-kaneko-nova + - konami-gx + - konami-gv + - century-cvs + - capcom-zn1 + - capcom-zn2 + - tecmo-tps + - taito-fx1 + - eighting-zn1 + - atlus-zn1 + - atari-zn1 + - acclaim-zn1 + - videosystem-zn1 + - nintendo-aleck64 + - arcadia-systems + - exidy-maxaflex + - brezzasoft-crystal + - imax-macs + - arcade + - barcrest-mpu4 + - atari-system1 + - efo-cedar-magnet + - taito-gnet + - sega-model1 + - midway-mcr + - namco-na1 + +standalone_pools: + dir_rom: "" + +notes: | + MAME 0.106 core (mame/version.c:11) under the Advance video, input and + sound layer, with driver backports from later MAME releases and the BIOS + and device archive names of current MAME. RetroPie builds the branch tip + with make install (RetroPie scriptmodules/emulators/advmame.sh:39-62). + + Twenty-eight BIOS root sets registered in mame/mamedriv.c, each declared + with BIOS, BIOSB or the NOT_A_DRIVER flag (mame/driver.h:183-187, + 526-530). bctvidbs is one of them and declares no ROM of its own + (mame/drivers/mpu4.c:2016-2019), so it has no entry below. + mame/drivers/macs.c:615 declares macs2bios, which mame/mamedriv.c never + registers. Fifteen device archives are registered too, declared with + DEVICE or DEVICEB (mame/driver.h:520-524). mame/devices/namcoc75.c + declares a sixteenth that mame/mamedriv.c never registers. A BIOS or + device entry cannot be run (mame/mame.c:266-270, advance/osd/emu.c:90-93). + + ROM archives are searched under dir_rom, defaulting to $home/rom:$data/rom + on Linux and Mac OS X and to rom on DOS and Windows, in the forms + DIR/GAME/ROM.EXT, DIR/GAME.zip/ROM.EXT and DIR/GAME/ROM.zip/ROM + (advance/osd/fileio.c:74, doc/advmame.d:680,699-701). $home is $ADVANCE, + or $HOME/.advance when that variable is unset (doc/advmame.d:503-509). + RetroPie sets dir_rom to $romdir/mame-advmame:$romdir/arcade (RetroPie + scriptmodules/emulators/advmame.sh:100). A ROM is looked up along the + parent chain, so a child game reads its BIOS from the root set's archive. + A ROM a driver declares with BIOS_LOAD is looked up in the named device + archive first, under the name the device lists, then along the parent + chain (mame/romload.h:290-296, mame/romload.c:250-268). BIOS_LOAD naming + an unregistered archive is fatal (mame/romload.c:194-248, 1320-1321). + Inside an archive a member is matched by name, then by its printable + CRC32 (mame/fileio.c:1191-1201). + + No BIOS or device ROM carries ROM_OPTIONAL or a no-good-dump marker, so a + missing one counts as an error and aborts with "required files are + missing, the game cannot be run" (mame/romload.c:407-430, 549-552). + Loaded ROMs are checked for exact length and against the declared CRC32 + and SHA1, both mismatches being warnings (mame/romload.c:489-533). The + three laserdisc player programs are opened directly by name and any + mismatch there is fatal (see their entries). + + Where a system offers several BIOS revisions, SYSTEM_BIOS_ADD names them + and misc_bios selects one, the default being the ROM_BIOS_DEFAULT the set + names, else entry 0 (doc/advmame.d:2142-2150, mame/romload.c:299-345). + Only the selected revision is read, and the others share the archive as + alternatives. Neo Geo lists MVS revisions alone, the AES, Universe and + debug entries being commented out (mame/drivers/neogeo.c:1422-1425, + 1441-1444). + + The support files sit directly in $home or $data + (advance/osd/fileio.c:81,88-90, advance/linux/file.c:249-256). A language + file is read too, under whatever name misc_languagefile carries + (advance/osd/glue.c:899-900). The project ships none, English being built + into the binary (mame/ui_text.c:262-264). Samples and artwork are + per-game, under dir_sample and dir_artwork. Samples are ZIP archives + named after the driver with WAV members (mame/sound/samples.c:228-230). + Artwork is a folder or ZIP archive named after the driver or one of its + parents, holding default.lay and the PNG or JPEG images it names + (mame/artwork_package.c:43-81, mame/artwork_lay.c:1615-1625). Laserdisc + games read their disc as a CHD named in their own ROM list. + + misc_historyfile and misc_infofile were retired and are discarded when found + in a configuration file (advance/osd/emu.c:520-521), leaving history.dat and + mameinfo.dat unread. options.controller is pinned to zero + (advance/osd/glue.c:892), so no controller file is read either. blitmax.dat, + startup.dat and help.dat are compiled into the binary + (advance/osd/video.c:1794,1802, advance/osd/ui.c:1575). + +files: + # Support files ($home or $data) + - name: hiscore.dat + required: false + bundled: true + category: game_data + system: arcade + sha1: "23e0dec66680aa4545eafe436c23d2bf5622e32e" + md5: "2490bad5079ec0991c23c579092cca19" + size: 176851 + source_ref: "mame/hiscore.c:27,132-146,312, mame/mame.c:1109-1110" + note: >- + High score definitions, selected by misc_hiscorefile + (advance/osd/glue.c:984,3518). Absent, hiscore_open matches no entry and + no high score is restored or saved. support/hiscore.dat, installed by + MAME_INSTALL_DATAFILES (advance/advance.mak:24-29). is_mem_range reads + only "cpu:addr:len:start:end" lines under a "gamename:" header. + + - name: cheat.dat + required: false + bundled: true + category: game_data + system: arcade + sha1: "4978ecafc4634cf20b639d8801c044dc156ab162" + md5: "69c6bbe7194e4bc62d53764dd6c6d890" + size: 13923773 + source_ref: "mame/cheat.c:8681,8750" + note: >- + Cheat definitions, selected by misc_cheatfile + (advance/osd/glue.c:983,3516) and read only when misc_cheat is on, which + it is not by default. Absent, the cheat menu reads "cheat database not + found" (mame/cheat.c:2535). Installed beside hiscore.dat by + MAME_INSTALL_DATAFILES, and shipped in the 5.0 Windows zip and .deb. + + - name: event.dat + required: false + bundled: true + category: game_data + system: arcade + sha1: "8c34c85f92bc6771d789e880953a1cc43341485e" + md5: "ee99bb541116967f8785a5bc09932475" + size: 22066 + source_ref: "advance/osd/safequit.c:165-180,260" + note: >- + Event and safequit definitions, selected by misc_eventfile and read + straight from $home then $data rather than through the file type table. + Absent, the exit menu always prompts instead of checking coin and play + state. The hash is support/event.dat as make install copies it. The + Windows zip carries the same file with CRLF line endings. + + # Neo-Geo + - name: neogeo.zip + path: "neogeo.zip" + required: true + category: bios_zip + systems: + - snk-neogeo-mvs + - arcade + source_ref: "mame/drivers/neogeo.c:1431-1440,7941-7955,8555" + note: >- + Eight MVS BIOS variants selected with misc_bios (euro, euro-s1, us, + us-e, asia, japan, japan-s2, japan-s1), euro by default. sm1.sm1, + 000-lo.lo and sfix.sfix are loaded whichever variant is selected. + contents: + - name: sp-s2.sp1 + description: Europe MVS (Ver. 2) + size: 131072 + crc32: "9036d879" + sha1: "4f5ed7105b7128794654ce82b51723e16e389543" + - name: sp-s.sp1 + description: Europe MVS (Ver. 1) + size: 131072 + crc32: "c7f2fa45" + sha1: "09576ff20b4d6b365e78e6a5698ea450262697cd" + - name: sp-u2.sp1 + description: US MVS (Ver. 2) + size: 131072 + crc32: "e72943de" + sha1: "5c6bba07d2ec8ac95776aa3511109f5e1e2e92eb" + - name: sp-e.sp1 + description: US MVS (Ver. 1) + size: 131072 + crc32: "2723a5b5" + sha1: "5dbff7531cf04886cde3ef022fb5ca687573dcb8" + - name: asia-s3.rom + description: Asia MVS (Ver. 3) + size: 131072 + crc32: "91b64be3" + sha1: "720a3e20d26818632aedf2c2fd16c54f213543e1" + - name: vs-bios.rom + description: Japan MVS (Ver. 3) + size: 131072 + crc32: "f0e8f27d" + sha1: "ecf01eda815909f1facec62abf3594eaa8d11075" + - name: sp-j2.sp1 + description: Japan MVS (Ver. 2) + size: 131072 + crc32: "acede59c" + sha1: "b6f97acd282fd7e94d9426078a90f059b5e9dd91" + - name: sp1.jipan.1024 + description: Japan MVS (Ver. 1) + size: 131072 + crc32: "9fb0abe4" + sha1: "18a987ce2229df79a8cf6a84f968f0e42ce4e59d" + - name: sm1.sm1 + description: Z80 sound BIOS + size: 131072 + crc32: "94416d67" + sha1: "42f9d7ddd6c0931fd64226a60dc73602b2819dcf" + - name: 000-lo.lo + description: Y zoom control + size: 131072 + crc32: "5a86cff2" + sha1: "5992277debadeb64d1c1c64b0a92d9293eaf7e4a" + - name: sfix.sfix + description: fix layer tiles + size: 131072 + crc32: "c2ea0cfd" + sha1: "fd4a618cdcdbf849374f0a50dd8efe9dbab706c3" + + # PGM (Polygame Master) System BIOS + - name: pgm.zip + path: "pgm.zip" + required: true + category: bios_zip + systems: + - igs-pgm + - arcade + source_ref: "mame/drivers/pgm.c:4415-4426,6904" + contents: + - name: pgm_p01s.rom + description: 68000 BIOS + size: 131072 + crc32: "e42b166e" + sha1: "2a9df9ec746b14b74fae48b1a438da14973702ea" + - name: pgm_t01s.rom + description: text layer tiles + size: 2097152 + crc32: "1a7123a0" + sha1: "cc567f577bfbf45427b54d6695b11b74f2578af3" + - name: pgm_m01s.rom + description: samples + size: 2097152 + crc32: "45ae7159" + sha1: "d3ed3ff3464557fd0df6b069b2e431528b0ebfa8" + + # ST-V Bios + - name: stvbios.zip + path: "stvbios.zip" + required: true + category: bios_zip + systems: + - sega-stv + - arcade + source_ref: "mame/drivers/stv.c:3236-3250,3251-3253,4296" + note: >- + Nine BIOS variants selected with misc_bios (japan, japana, us, japanb, + taiwan, europe, unknown, dev1061, japanc), japan by default. + contents: + - name: epr19730.ic8 + description: Japan (bios epr19730) + size: 524288 + crc32: "d0e0889d" + sha1: "fae53107c894e0c41c49e191dbe706c9cd6e50bd" + - name: mp17951a.s + description: Japan (bios mp17951a) + size: 524288 + crc32: "2672f9d8" + sha1: "63cf4a6432f6c87952f9cf3ab0f977aed2367303" + - name: mp17952a.s + description: USA (bios mp17952a) + size: 524288 + crc32: "d1be2adf" + sha1: "eaf1c3e5d602e1139d2090a78d7e19f04f916794" + - name: 20091.bin + description: Japan (bios 20091) + size: 524288 + crc32: "59ed40f4" + sha1: "eff0f54c70bce05ff3a289bf30b1027e1c8cd117" + - name: mp17953a.ic8 + description: Taiwan (bios mp17953a) + size: 524288 + crc32: "a4c47570" + sha1: "9efc73717ec8a13417e65c54344ded9fc25bf5ef" + - name: mp17954a.s + description: Europe (bios mp17954a) + size: 524288 + crc32: "f7722da3" + sha1: "af79cff317e5b57d49e463af16a9f616ed1eee08" + - name: stv110.bin + description: Unknown (debug?) + size: 524288 + crc32: "3dfeda92" + sha1: "8eb33192a57df5f3a1dfb57263054867c6b2db6d" + - name: stv1061.bin + description: Development (bios 1.061) + size: 524288 + crc32: "728dbca3" + sha1: "0ed2030177f0aa8285645c395ae9ad9f568ab1d6" + - name: epr-17740.bin + description: Japan (bios epr17740) + size: 524288 + crc32: "5c5aa63d" + sha1: "06860d96923b81afbc21e0ad32ee19487d8ff6e7" + + # Mega Play BIOS + - name: megaplay.zip + path: "megaplay.zip" + required: true + category: bios_zip + systems: + - sega-megaplay + - arcade + source_ref: "mame/drivers/megaplay.c:789-792,793-796,991" + note: >- + Two BIOS variants selected with misc_bios (ver1, ver2), ver1 by default. + contents: + - name: ep15294.ic2 + description: Mega Play BIOS (Ver. 1) + size: 131072 + crc32: "aa8dc2d8" + sha1: "96771ad7b79dc9c83a1594243250d65052d23176" + - name: epr-a15294.ic2 + description: Mega Play BIOS (Ver. 2) + size: 131072 + crc32: "f97c68aa" + sha1: "bcabc879950bca1ced11c550a484e697ec5706b2" + + # Mega-Tech BIOS + - name: megatech.zip + path: "megatech.zip" + required: true + category: bios_zip + systems: + - sega-megatech + - arcade + source_ref: "mame/drivers/megatech.c:456-459,868" + contents: + - name: epr12664.20 + size: 32768 + crc32: "f71e9526" + sha1: "1c7887541d02c41426992d17f8e3db9e03975953" + + # Cassette System + - name: decocass.zip + path: "decocass.zip" + required: true + category: bios_zip + systems: + - deco-cassette + - arcade + source_ref: "mame/drivers/decocass.c:709-722,729-732,1215" + note: >- + Two main CPU BIOS variants selected with misc_bios (bios0, bios1), bios0 + by default. The audio CPU, MCU and PROMs are loaded whichever variant is + selected. + contents: + - name: rms8.cpu + description: main CPU BIOS (bios0) + size: 4096 + crc32: "23d929b7" + sha1: "063f83020ba3d6f43ab8471f95ca919767b93aa4" + - name: dsp3.p0b + description: main CPU BIOS (bios1) + size: 2048 + crc32: "b67a91d9" + sha1: "681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb" + - name: dsp3.p1b + description: main CPU BIOS (bios1) + size: 2048 + crc32: "3bfff5f3" + sha1: "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce" + - name: rms8.snd + description: audio CPU + size: 2048 + crc32: "b66b2c2a" + sha1: "0097f38beb4872e735e560148052e258a26b08fd" + - name: cass8041.bin + description: MCU + size: 1024 + crc32: "a6df18fd" + sha1: "1f9ea47e372d31767c936c15852b43df2b0ee8ff" + - name: dsp8.3m + description: PROM + size: 32 + crc32: "238fdb40" + sha1: "b88e8fabb82092105c3828154608ea067acbf2e5" + - name: dsp8.10d + description: PROM + size: 32 + crc32: "3b5836b4" + sha1: "b630bb277d9ec09d46ef26b944014dd6165b35d8" + - name: rms8.j3 + description: DRAM banking and timing PROM + size: 32 + crc32: "51eef657" + sha1: "eaedce5caf55624ad6ae706aedf82c5717c60f1f" + + # PlayChoice-10 BIOS + - name: playch10.zip + path: "playch10.zip" + required: true + category: bios_zip + systems: + - nintendo-playch10 + - arcade + source_ref: "mame/drivers/playch10.c:793-797,798-806,1650-1653,1661" + note: >- + Two BIOS variants selected with misc_bios (dual, single), dual by + default. Tiles and PROMs are loaded whichever variant is selected. + contents: + - name: pch1-c.8t + description: Dual Monitor Version + size: 16384 + crc32: "d52fa07a" + sha1: "55cabf52ae10c050c2229081a80b9fe5454ab8c5" + - name: pck1-c.8t + description: Single Monitor Version + size: 16384 + crc32: "503ee8b1" + sha1: "3bd20bc71cac742d1b8c1430a6426d0a19db7ad0" + - name: pch1-c.8p + description: BIOS tiles + size: 8192 + crc32: "30c15e23" + sha1: "69166afdb2fe827c7f1919cdf4197caccbd961fa" + - name: pch1-c.8m + description: BIOS tiles + size: 8192 + crc32: "c1232eee" + sha1: "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f" + - name: pch1-c.8k + description: BIOS tiles + size: 8192 + crc32: "9acffb30" + sha1: "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c" + - name: pch1-c.6f + description: PROM + size: 256 + crc32: "e5414ca3" + sha1: "d2878411cda84ffe0afb2e538a67457f51bebffb" + - name: pch1-c.6e + description: PROM + size: 256 + crc32: "a2625c6e" + sha1: "a448b47c9289902e26a3d3c4c7d5a7968c385e81" + - name: pch1-c.6d + description: PROM + size: 256 + crc32: "1213ebd4" + sha1: "0ad386fc3eab5e53c0288ad1de33639a9e461b7c" + + # Nintendo Super System BIOS + - name: nss.zip + path: "nss.zip" + required: true + category: bios_zip + systems: + - nintendo-nss + - arcade + source_ref: "mame/drivers/nss.c:519-529,530-532,663" + note: >- + nss-c.dat and nss-ic14.02 are read from this archive. The games take + spc700.rom from s_smp.zip and dsp1b.bin from sns_dsp1bleg.zip first + (mame/drivers/nss.c:521, 523). + contents: + - name: nss-c.dat + description: BIOS CPU + size: 32768 + crc32: "a8e202b3" + sha1: "b7afcfe4f5cf15df53452dc04be81929ced1efb2" + - name: nss-ic14.02 + description: BIOS CPU + size: 32768 + crc32: "e06cb58f" + sha1: "62f507e91a2797919a78d627af53f029c7d81477" + + # Super Kaneko Nova System BIOS + - name: skns.zip + path: "skns.zip" + required: true + category: bios_zip + systems: + - super-kaneko-nova + - arcade + source_ref: "mame/drivers/suprnova.c:1272-1279,1767" + note: >- + Five region BIOS ROMs, all loaded into the same region. + contents: + - name: sknsj1.u10 + description: Japan + size: 524288 + crc32: "7e2b836c" + sha1: "92c5a7a2472496028bff0e5980d41dd294f42144" + - name: sknse1.u10 + description: Europe + size: 524288 + crc32: "e2b9d7d1" + sha1: "b530a3bb9dedc8cfafcba9f1f10277590be04a15" + - name: sknsa1.u10 + description: Asia + size: 524288 + crc32: "745e5212" + sha1: "caba649ab2d83b2d7e007eecee0fc582c019df38" + - name: sknsu1.u10 + description: USA + size: 524288 + crc32: "384d21ec" + sha1: "a27e8a18099d9cea64fa32db28d01101c2a78815" + - name: sknsk1.u10 + description: Korea + size: 524288 + crc32: "ff1c9f79" + sha1: "a51e598d43e76d37da69b1f094c111273bdfc94a" + + # System GX + - name: konamigx.zip + path: "konamigx.zip" + required: true + category: bios_zip + systems: + - konami-gx + - arcade + source_ref: "mame/drivers/konamigx.c:2178,2180-2183,3521" + contents: + - name: 300a01.34k + size: 131072 + crc32: "d5fa95f5" + sha1: "c483aa98ff8ef40cdac359c19ad23fea5ecc1906" + + # Baby Phoenix/GV System + - name: konamigv.zip + path: "konamigv.zip" + required: true + category: bios_zip + systems: + - konami-gv + - arcade + source_ref: "mame/drivers/konamigv.c:970-972,974-978,1060" + contents: + - name: 999a01.7e + size: 524288 + crc32: "ad498d2d" + sha1: "02a82a2fe1fba0404517c3602324bfa64e23e478" + + # CVS Bios + - name: cvs.zip + path: "cvs.zip" + required: true + category: bios_zip + systems: + - century-cvs + - arcade + source_ref: "mame/drivers/cvs.c:422-432,1403" + contents: + - name: 5b.bin + description: sound CPU + size: 2048 + crc32: "f055a624" + sha1: "5dfe89d7271092e665cdd5cd59d15a2b70f92f43" + - name: 82s185.10h + description: PROM + size: 2048 + crc32: "c205bca6" + sha1: "ec9bd220e75f7b067ede6139763ef8aca0fb7a29" + - name: 82s123.10k + description: PROM + size: 32 + crc32: "b5221cec" + sha1: "71d9830b33b1a8140b0fe1a2ba8024ba8e6e48e0" + + # ZN1 + - name: coh1000c.zip + path: "coh1000c.zip" + required: true + category: bios_zip + systems: + - capcom-zn1 + - arcade + source_ref: "mame/drivers/zn.c:3342-3344,3346-3348,4801" + contents: + - name: coh-1000c.353 + size: 524288 + crc32: "50033af6" + sha1: "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a" + + # ZN2 + - name: coh3002c.zip + path: "coh3002c.zip" + required: true + category: bios_zip + systems: + - capcom-zn2 + - arcade + source_ref: "mame/drivers/zn.c:3577-3579,3581-3583,4819" + contents: + - name: coh-3002c.353 + size: 524288 + crc32: "e860ea8b" + sha1: "66e7e1d4e426466b8f48a2ba055a91b475569504" + + # TPS + - name: coh1002m.zip + path: "coh1002m.zip" + required: true + category: bios_zip + systems: + - tecmo-tps + - arcade + source_ref: "mame/drivers/zn.c:4020-4022,4024-4026,4866" + contents: + - name: coh-1002m.353 + size: 524288 + crc32: "69ffbcb4" + sha1: "03eb2febfab3fcde716defff291babd9392de965" + + # Taito FX1 + - name: coh1000t.zip + path: "coh1000t.zip" + required: true + category: bios_zip + systems: + - taito-fx1 + - arcade + source_ref: "mame/drivers/zn.c:4316-4318,4320-4322,4899" + contents: + - name: coh-1000t.353 + size: 524288 + crc32: "e3f23b6e" + sha1: "e18907cf8c6ba54d96edba0a9a00487a90219e0d" + + # PS Arcade 95 + - name: coh1002e.zip + path: "coh1002e.zip" + required: true + category: bios_zip + systems: + - eighting-zn1 + - arcade + source_ref: "mame/drivers/zn.c:4588-4590,4592-4594,4926" + contents: + - name: coh-1002e.353 + size: 524288 + crc32: "910f3a8b" + sha1: "cd68532967a25f476a6d73473ec6b6f4df2e1689" + + # Atlus PSX + - name: coh1001l.zip + path: "coh1001l.zip" + required: true + category: bios_zip + systems: + - atlus-zn1 + - arcade + source_ref: "mame/drivers/zn.c:4767-4769,4771-4773,4938" + contents: + - name: coh-1001l.353 + size: 524288 + crc32: "6721146b" + sha1: "9511d24bfe25eb180fb2db0835b131cb4a12730e" + + # Time Warner ZN-1 + - name: coh1000w.zip + path: "coh1000w.zip" + required: true + category: bios_zip + systems: + - atari-zn1 + - arcade + source_ref: "mame/drivers/zn.c:4674-4678,4680-4682,4846" + contents: + - name: msm27c402zb.ic353 + size: 524288 + crc32: "45e8a4b4" + sha1: "815488d8563c85f97fbc3384ff21f08e4c88b7b7" + - name: tw01.ic652 + description: CAT702 security + size: 8 + crc32: "1cac067e" + sha1: "8e87941bfb374172628c8a37647e3a66b7166aa8" + + # Acclaim PSX + - name: coh1000a.zip + path: "coh1000a.zip" + required: true + category: bios_zip + systems: + - acclaim-zn1 + - arcade + source_ref: "mame/drivers/zn.c:4705-4707,4709-4711,4855" + contents: + - name: coh-1000a.353 + size: 524288 + crc32: "8d8d0764" + sha1: "7ee83d317190bb1cef2f8f01c81eaaae47150ebb" + + # Video System PSX + - name: coh1002v.zip + path: "coh1002v.zip" + required: true + category: bios_zip + systems: + - videosystem-zn1 + - arcade + source_ref: "mame/drivers/zn.c:4248-4250,4252-4254,4888" + contents: + - name: coh-1002v.ic353 + size: 524288 + crc32: "5ff165f3" + sha1: "8f59314c1093446b9bcb06d232244da6df78e206" + + # Aleck64 PIF BIOS + - name: aleck64.zip + path: "aleck64.zip" + required: true + category: bios_zip + systems: + - nintendo-aleck64 + - arcade + source_ref: "mame/drivers/aleck64.c:697-704,778" + contents: + - name: pifdata.bin + size: 2048 + crc32: "5ec82be9" + sha1: "9174eadc0f0ea2654c95fd941406ab46b9dc9bdd" + + # Atari System 1 BIOS + - name: atarisy1.zip + path: "atarisy1.zip" + required: true + category: bios_zip + systems: + - atari-system1 + - arcade + source_ref: "mame/drivers/atarisy1.c:847-853,855-858,860-875,2302" + note: >- + Device archive of the three motherboard revisions, selected with + misc_bios (ttl, ttl1, lsi), lsi by default + (mame/drivers/atarisy1.c:861). The games take the BIOS and alphanumerics + ROMs from it first (mame/drivers/atarisy1.c:844-845). The TTL + motherboard PROMs are listed in the archive and read by no game. + contents: + - name: 136032.205.l13 + description: TTL BIOS (Rev 2), even bytes + size: 16384 + crc32: "88d0be26" + sha1: "d124045eccc562ff0423b23a240e27ad740fa0c9" + - name: 136032.206.l12 + description: TTL BIOS (Rev 2), odd bytes + size: 16384 + crc32: "3c79ef05" + sha1: "20fdca7131478e1ee12691bdafd2d5bb74cbd16f" + - name: 136032.105.l13 + description: TTL BIOS (Rev 1), even bytes + size: 16384 + crc32: "79021d3c" + sha1: "85febd34bcb166fc3326b5e5e4e80e157b660a08" + - name: 136032.106.l12 + description: TTL BIOS (Rev 1), odd bytes + size: 16384 + crc32: "76ee86c4" + sha1: "cbcd424510435a04e9041967a13781fd19b0f2c4" + - name: 136032.114.j11 + description: LSI BIOS, even bytes + size: 16384 + crc32: "195c54ad" + sha1: "d7cda3cd3db4c6f77074ca05e96ae11b62e048b7" + - name: 136032.115.j10 + description: LSI BIOS, odd bytes + size: 16384 + crc32: "7275b4dc" + sha1: "0896ab37ea832a1335046353612c1b4c86d8d040" + - name: 136032.104.f5 + description: alphanumerics, TTL motherboards + size: 8192 + crc32: "7a29dc07" + sha1: "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad" + - name: 136032.107.b2 + description: alphanumerics, LSI motherboard + size: 8192 + crc32: "7a29dc07" + sha1: "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad" + - name: 136032.101.e3 + description: TTL motherboard PROM + size: 256 + crc32: "7e84972a" + sha1: "84d422b53547271e3a07342704a05ef481db3f99" + - name: 136032.102.e5 + description: TTL motherboard PROM + size: 256 + crc32: "ebf1e0ae" + sha1: "2d327e78832edd67ca3909c25b8c8c839637a1ed" + - name: 136032.103.f7 + description: TTL motherboard PROM + size: 235 + crc32: "92d6a0b4" + sha1: "0a42a4816c89447b16e1f3245409591efea98a4a" + + # Magnet System + - name: cedmag.zip + path: "cedmag.zip" + required: true + category: bios_zip + systems: + - efo-cedar-magnet + - arcade + source_ref: "mame/drivers/cedar_magnet.c:881-883,885-890,948" + contents: + - name: magnet-master-vid-e03.bin + size: 8192 + crc32: "86c4a4f0" + sha1: "6db1a006b2e0b2a7cc9748ade881debb098b6757" + + # Arcadia System BIOS + - name: ar_bios.zip + path: "ar_bios.zip" + required: true + category: bios_zip + systems: + - arcadia-systems + - arcade + source_ref: "mame/drivers/arsystems.c:356-371,375-377,823" + note: >- + Three BIOS variants selected with misc_bios (onep300, onep211, tenp211), + onep300 by default. kick12.rom is loaded whichever variant is selected. + contents: + - name: kick12.rom + description: Amiga Kickstart 1.2 + size: 262144 + crc32: "a6ce1636" + sha1: "11f9e62cf299f72184835b7b2a70a16333fc0d88" + - name: scpav3_0.1h + description: OnePlay 3.00 + size: 65536 + crc32: "2d8e1a06" + sha1: "be187f34624aeda110017c4a09242f7c00ef56a4" + - name: scpav3_0.1l + description: OnePlay 3.00 + size: 65536 + crc32: "e4f38fab" + sha1: "01c2eb5965070893be6734eb1372576727716476" + - name: scpa211h + description: OnePlay 2.11 + size: 65536 + crc32: "be9dbdc5" + sha1: "1554da09f051ec53937d65d4e451de51bc0c69e5" + - name: scpa211l + description: OnePlay 2.11 + size: 65536 + crc32: "95b84504" + sha1: "99999fc40909001b37aa1b543918118becc81800" + - name: gcp-1-hi + description: TenPlay 2.11 + size: 65536 + crc32: "67d44523" + sha1: "f3e3699132cdf741518accb890c04d17374c4049" + - name: gcp-1-lo + description: TenPlay 2.11 + size: 65536 + crc32: "65d9b9cf" + sha1: "5c60a0dd4a0a7d9b938ce6b0446a6ad2ecaf07ec" + - name: gcp-2-hi + description: TenPlay 2.11 + size: 65536 + crc32: "1d7594ae" + sha1: "6173bbfecf18d7d9ee6bc2b6753ca9d42fabd781" + - name: gcp-2-lo + description: TenPlay 2.11 + size: 65536 + crc32: "e776198d" + sha1: "694ca4cc99ed84a95d18201c94a3332f8599654f" + - name: gcp-3-hi + description: TenPlay 2.11 + size: 65536 + crc32: "3e7364be" + sha1: "26e10d0ddc031a891138db36ce4f1732722e6847" + - name: gcp-3-lo + description: TenPlay 2.11 + size: 65536 + crc32: "87229e0d" + sha1: "0b18544801e529f954b9e03226bd2e5475f36351" + + # Max-A-Flex + - name: maxaflex.zip + path: "maxaflex.zip" + required: true + category: bios_zip + systems: + - exidy-maxaflex + - arcade + source_ref: "mame/drivers/maxaflex.c:520-529,585" + contents: + - name: atarixl.rom + description: main CPU ROM + size: 16384 + crc32: "1f9cd270" + sha1: "ae4f523ba08b6fd59f3cae515a2b2410bbd98f55" + - name: maxaflex.uc + description: microcontroller + size: 2048 + crc32: "fe9cf53c" + sha1: "4b02bc2f0c8a1eab799814fac82d5812c0160206" + - name: maxprom.prm + description: PROM + size: 512 + crc32: "edf5c950" + sha1: "9ad046ea41a61585dd8d2f2d4167a3cc39d2928f" + + # Crystal System BIOS + - name: crysbios.zip + path: "crysbios.zip" + required: true + category: bios_zip + systems: + - brezzasoft-crystal + - arcade + source_ref: "mame/drivers/crystal.c:924-929,1032" + contents: + - name: mx27l1000.u14 + size: 131072 + crc32: "beff39a9" + sha1: "b6f6dda58d9c82273f9422c1bd623411e58982cb" + + # Multi Amenity Cassette System BIOS + - name: macsbios.zip + path: "macsbios.zip" + required: true + category: bios_zip + systems: + - imax-macs + - arcade + source_ref: "mame/drivers/macs.c:386-390,396-404,614" + contents: + - name: macsos_l.u43 + description: BIOS low byte + size: 524288 + crc32: "0b5aed5e" + sha1: "042e705017ee34656e2c6af45825bb2dd3447747" + - name: macsos_h.u44 + description: BIOS high byte + size: 524288 + crc32: "538b68e4" + sha1: "a0534147791e94e726f49451d0e95671ae0a87d5" + + # Taito GNET BIOS + - name: coh3002t.zip + path: "coh3002t.zip" + required: true + category: bios_zip + systems: + - taito-gnet + - arcade + source_ref: "mame/devices/coh3002t.c:7-10,12" + note: >- + Taito G-NET BIOS, taken from this archive first by taitogn, the G-NET + driver that runs no game (mame/drivers/zn.c:4572-4584, 4919). + contents: + - name: m534002c-60.ic353 + size: 524288 + crc32: "03967fa7" + sha1: "0e17fec2286e4e25deb23d40e41ce0986f373d49" + + # Model 1 Communication Board + - name: m1comm.zip + path: "m1comm.zip" + required: true + category: bios_zip + systems: + - sega-model1 + - arcade + source_ref: "mame/devices/m1comm.c:7-11,13" + note: >- + Model 1 communication board programs. Virtua Formula takes epr-15624.17 + from this archive first (mame/drivers/model1.c:1344, 1387). + contents: + - name: epr-15112.17 + size: 131072 + crc32: "4950e771" + sha1: "99014124e0324dd114cb22f55159d18b597a155a" + - name: epr-15624.17 + size: 131072 + crc32: "9b3ba315" + sha1: "0cd0983cc8b2f2d6b41617d0d0a24cc6c188e62a" + + # Midway SSIO Sound Board + - name: midssio.zip + path: "midssio.zip" + required: true + category: bios_zip + systems: + - midway-mcr + - arcade + source_ref: "mame/devices/midssio.c:7-10,12" + note: >- + SSIO sound board PROM, taken from this archive by the MCR and MCR-III + games first (mame/drivers/mcr.c, mame/drivers/mcr3.c). + contents: + - name: 82s123.12d + size: 32 + crc32: "e1281ee9" + sha1: "9ac9b01d24affc0ee9227a4364c4fd8f8290343a" + + # Namco C65 I/O + - name: namcoc65.zip + path: "namcoc65.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/devices/namcoc65.c:7-10,12" + note: >- + C65 I/O MCU program, taken from this archive by the System 2 and System + 21 games first (mame/drivers/namcos2.c, mame/drivers/namcos21.c). + contents: + - name: sys2mcpu.bin + size: 8192 + crc32: "a342a97e" + sha1: "2c420d34dba21e409bf78ddca710fc7de65a6642" + + # Namco C68 I/O + - name: namcoc68.zip + path: "namcoc68.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/devices/namcoc68.c:7-10,12" + note: >- + C68 I/O MCU program, taken from this archive by three System 2 games + first (mame/drivers/namcos2.c:3812, 3856, 3902). + contents: + - name: c68.bin + size: 32768 + crc32: "ca64550a" + sha1: "38d1ad1b1287cadef0c999aff9357927315f8e6b" + + # Namco C69 (M37702) + - name: namcoc69.zip + path: "namcoc69.zip" + required: true + category: bios_zip + systems: + - namco-na1 + - arcade + source_ref: "mame/devices/namcoc69.c:7-10,12" + note: >- + C69 MCU program, taken from this archive by the NA-1 and NA-2 games + first (mame/drivers/namcona1.c). + contents: + - name: c69.bin + size: 16384 + crc32: "349134d9" + sha1: "61a4981fc2716c228b6121fedcbf1ed6f34dc2de" + + # Namco C71 (TMS320C25) + - name: namcoc71.zip + path: "namcoc71.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/devices/namcoc71.c:7-10,12" + note: >- + C71 DSP program, taken from this archive by the System 22 games first + (mame/drivers/namcos22.c:2043, 2045). + contents: + - name: c71.bin + size: 8192 + crc32: "47c623ab" + sha1: "e363ac50f5556f83308d4cc191b455e9b62bcfc8" + + # Namco C74 (M37702) + - name: namcoc74.zip + path: "namcoc74.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/devices/namcoc74.c:7-10,12" + note: >- + C74 MCU program, taken from this archive by the Super System 22 games + first (mame/drivers/namcos22.c:2085). + contents: + - name: c74.bin + size: 16384 + crc32: "a3dce360" + sha1: "8f3248b1890abb2e649927240ae46f73bb171e3b" + + # Nintendo/Sony S-SMP + - name: s_smp.zip + path: "s_smp.zip" + required: true + category: bios_zip + systems: + - nintendo-nss + - arcade + source_ref: "mame/devices/s_smp.c:7-10,12" + note: >- + S-SMP IPL ROM, taken from this archive by the Nintendo Super System and + SNES bootleg games first (mame/drivers/nss.c:521, mame/drivers/snesb.c). + contents: + - name: spc700.rom + size: 64 + crc32: "44bb3a40" + sha1: "97e352553e94242ae823547cd853eecda55c20f0" + + # SAA5050 Teletext Character Generator + - name: saa5050.zip + path: "saa5050.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/devices/saa5050.c:7-10,12" + note: >- + Teletext character generator, taken from this archive by the Malzak + games first (mame/drivers/malzak.c:532, 556). + contents: + - name: saa5050 + size: 960 + crc32: "201490f3" + sha1: "6c8daba70374e5aa3a6402f24cdc5f8677d58a0f" + + # Bally Sente 6VB Audio Board + - name: sente6vb.zip + path: "sente6vb.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/devices/sente6vb.c:7-10,12" + note: >- + 6VB audio board program, taken from this archive by the Bally/Sente + games first (mame/drivers/balsente.c). + contents: + - name: 8002-10 9-25-84.5 + size: 8192 + crc32: "4dd0a525" + sha1: "f0c447adc5b67917851a9df978df851247e75c43" + + # SNES DSP1B Firmware + - name: sns_dsp1bleg.zip + path: "sns_dsp1bleg.zip" + required: true + category: bios_zip + systems: + - nintendo-nss + - arcade + source_ref: "mame/devices/sns_dsp1bleg.c:7-10,12" + note: >- + DSP1B program, taken from this archive by the Nintendo Super System + games first (mame/drivers/nss.c:523). + contents: + - name: dsp1b.bin + size: 10240 + crc32: "453557e0" + sha1: "3a218b0e4572a8eba6d0121b17fdac9529609220" + + # T5182 MCU + - name: t5182.zip + path: "t5182.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/devices/t5182.c:7-10,12" + note: >- + T5182 MCU program, taken from this archive by Dark Mist and Mustache Boy + first (mame/drivers/darkmist.c:330, mame/drivers/mustache.c:231). + contents: + - name: t5182.rom + size: 8192 + crc32: "d354c8fc" + sha1: "a1c9e1ac293f107f69cc5788cf6abc3db1646e33" + + # MPU4 Video Firmware + - name: v4bios.zip + path: "v4bios.zip" + required: true + category: bios_zip + systems: + - barcrest-mpu4 + - arcade + source_ref: "mame/devices/v4bios.c:7-10,12" + note: >- + MPU4 video firmware, taken from this archive by the MPU4 video games + first (mame/drivers/mpu4.c:2013-2014). bctvidbs, the BIOS root those + games parent to, declares no ROM of its own + (mame/drivers/mpu4.c:2016-2019). + contents: + - name: vid.p1 + size: 65536 + crc32: "e996bc18" + sha1: "49798165640627eb31024319353da04380787b10" + + # Pioneer PR-8210 laserdisc player + - name: pr8210.zip + path: "pr8210.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/drivers/cliffhgr.c:98-113, mame/drivers/cubeqst.c:109-121,125-126" + note: >- + Player MCU program, opened by name in pr8210.zip for Cliff Hanger and + Cube Quest outside the driver's ROM list. A missing file, a length other + than 2048 bytes or another CRC32 or SHA1 is fatal. + contents: + - name: pr-8210_mcu_ud6005a.bin + size: 2048 + crc32: "120fa83b" + sha1: "b514326ca1f52d6d89056868f9d17eabd4e3f31d" + + # Philips 22VP931 laserdisc player + - name: 22vp931.zip + path: "22vp931.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/machine/ldvp931.c:147-160, mame/drivers/firefox.c:314-317" + note: >- + Player program, opened by name in 22vp931.zip for Fire Fox outside the + driver's ROM list. A missing file, a length other than 2048 bytes or + another CRC32 or SHA1 is fatal. + contents: + - name: at-6-1_a.bin + size: 2048 + crc32: "e11b3c8d" + sha1: "ea2d7f6a044ed085ce5e09d8b1b1a21c37f0e9b8" + + # Simutrek laser player interface + - name: simutrek.zip + path: "simutrek.zip" + required: true + category: bios_zip + system: arcade + source_ref: "mame/drivers/cubeqst.c:109-121,127-128,339" + note: >- + Interface MCU program, opened by name in simutrek.zip for Cube Quest + outside the driver's ROM list. A missing file, a length other than 1024 + bytes or another CRC32 or SHA1 is fatal. + contents: + - name: laser_player_interface_d8748_a308.bin + size: 1024 + crc32: "eed3e728" + sha1: "1eb3467f1c41553375b2c21952cd593b167f5416" diff --git a/schemas/emulator.schema.json b/schemas/emulator.schema.json index cadfc1506..2b4bf367c 100644 --- a/schemas/emulator.schema.json +++ b/schemas/emulator.schema.json @@ -11,7 +11,7 @@ ], "allOf": [ { - "comment": "A build reference documents why a pin is held, or the build config_reads are read at: it never stands without the pin_frozen or the config_reads that say so.", + "comment": "A build reference documents why a pin is held or follows the branch tip, or the build config_reads are read at: it never stands without the pin_frozen, pin_follows or config_reads that say so.", "if": { "required": [ "pin_build" @@ -20,6 +20,7 @@ "then": { "anyOf": [ {"required": ["pin_frozen"]}, + {"required": ["pin_follows"]}, {"required": ["config_reads"]} ] } @@ -1142,7 +1143,7 @@ "pin_build": { "type": "array", "minItems": 1, - "description": "The build file each platform that ships a pin_frozen build, or the build a config_reads entry is read at, reads its revision from, so check_freshness can read it again where the platform's YAML now stands and say when the platform builds another revision.", + "description": "The build file each platform that ships a pin_frozen or pin_follows build, or the build a config_reads entry is read at, reads its revision from, so check_freshness can read it again where the platform's YAML now stands and say when the platform builds another revision.", "items": { "type": "object", "additionalProperties": false, diff --git a/scripts/profile_sync.py b/scripts/profile_sync.py index 99abe41d4..5081c323c 100644 --- a/scripts/profile_sync.py +++ b/scripts/profile_sync.py @@ -3682,10 +3682,11 @@ def bump_commit( if pending_recale(report, accept_changed, text): return False document = yaml.safe_load(text) - if document.get("built_by"): + if document.get("built_by") and not document.get("pin_follows"): # The pin is the commit a platform builds (recalbox gsplus.mk, the # mame0258 its package fetches), not a point on a moving branch: - # HEAD is a build nobody ships under this name. + # HEAD is a build nobody ships under this name. A build of the + # branch tip (RetroPie's advmame) is HEAD, and follows it. print( f"{path.stem}: pinned to the build {', '.join(document['built_by'])} " "ships, advanced by hand", diff --git a/tests/test_pin_build.py b/tests/test_pin_build.py index 029216664..f2503a8f6 100644 --- a/tests/test_pin_build.py +++ b/tests/test_pin_build.py @@ -145,7 +145,13 @@ class EveryBuildReferenceNamesThePin(unittest.TestCase): else {str(versions)} if versions else set() ) + source = str(profile.get("source") or "").rstrip("/").removesuffix(".git") + def names_it(value: str) -> bool: + if profile.get("pin_follows"): + # A build of the branch tip names the repository it + # clones, at no revision: RetroPie's advmame. + return value.split()[-1].rstrip("/").removesuffix(".git") == source token = value.split()[-1].rsplit("/", 1)[-1].removesuffix(".tar.gz") return value in pins or any(token in v or v in value for v in versions) diff --git a/tests/test_profile_sync.py b/tests/test_profile_sync.py index a8f937122..eef2f5db9 100644 --- a/tests/test_profile_sync.py +++ b/tests/test_profile_sync.py @@ -3079,7 +3079,10 @@ class TestDeliberatelyFrozenPin(TestBuildReport): # systems are a subset, not an equal set. A live build can also drop # a system upstream deleted: advancemame removed its Hyper Neo Geo 64 # driver in dff25b6ee7, which advmame-1.4 still carries. - removed_upstream = {("advmame-1.4", "advancemame"): {"hyper-neogeo64"}} + removed_upstream = { + ("advmame-1.4", "advancemame"): {"hyper-neogeo64"}, + ("advmame-1.4", "advmame"): {"hyper-neogeo64"}, + } pairs = 0 for names in by_source.values(): frozen = [ @@ -3373,6 +3376,27 @@ class TestBumpCommit(unittest.TestCase): self.assertFalse(bump_commit(self.path, report)) self.assertNotIn("newhead", self.path.read_text()) + def test_a_build_of_the_branch_tip_follows_it(self): + # RetroPie builds AdvanceMAME from the tip of master + # (advmame.sh:16, 39-41): HEAD is the build it ships. + self.path.write_text( + SAMPLE + "built_by: [retropie]\n" + + 'pin_follows: "RetroPie builds the branch tip"\n', + encoding="utf-8", + ) + part = PartResult( + RefPart("a.c", 10, 12, "a.c:10-12"), "ANCHORED", None, 10, 12, [] + ) + report = ProfileReport( + name="p", repo="o/n", pin="pin", head="newhead", + entries=[ + EntryReport("a.bin", "a.c:10-12, (just a note)", "ANCHORED", [part]) + ], + counts={"ANCHORED": 1}, + ) + self.assertTrue(bump_commit(self.path, report)) + self.assertIn("newhead", self.path.read_text()) + def test_refused_when_no_ref_reads_the_pinned_repository(self): """gam4980: every bare libretro.c ref anchored in upstream, and the bump wrote the fork's HEAD over refs that never described it."""