Commit Graph
2544 Commits
Author SHA1 Message Date
Abdessamad Derraz 805ca3bb6b fix: pass over a profile revision that won't parse
One unparsable commit in a profile's history stopped the walk and
marked every older prose citation unknown, which refused the recale and
bump for good (lindbergh-loader, df7346b3). The revision is now passed
over unless the pins differ on its two sides while the field's
citations changed across it.
2026-10-21 05:18:49 +02:00
Abdessamad Derraz 38af19091d fix: compare pack paths, not only counts
Step 5 compared (ok, total) and the core file count. RetroArch, Lakka
and RetroPie read 526/526 on both sides while verify credited four paths
below SGB1.sfc and SGB2.sfc that the pack never writes: a declared file
blocks them as a directory. verify now places the platform files in the
builder's order with the same path rules, and a user_provided or
external declaration keeps its slot on both sides, so no core file takes
it in the report only.

verify --destinations writes the paths each pack holds by the report,
and step 5 compares them with the archive members (notes and data tree
members set aside). Every emulator profile, in each build it has, is
built in memory (PackRecord, nothing read or written) and compared with
verify --emulator path by path. Cost measured here: about 1 s per
platform archive and 11 s for the 930 emulator packs.
2026-10-21 05:18:02 +02:00
Abdessamad Derraz 247093d7d2 fix: name BizHawk firmware by its own database
BizHawk finds firmware by SHA-1 scan or a user specification, so the
profile is found_by content. 38 entries used the names RetroBat's
generator writes; they now carry FirmwareDatabase.cs recommended
names, and the pooled NDS firmware entry is split per option.
2026-10-21 05:17:34 +02:00
Abdessamad Derraz bca76e8ace fix: judge a cached large file from one read
_fetch_asset hashed the cache copy, then hashed the path again for the
release check. A copy another run promoted in between answered the second
question, and the caller was told the cache held nothing when it held
the file asked for. Both checks now read one snapshot, taken while the
inode stays the same.
2026-10-21 05:17:16 +02:00
Abdessamad Derraz b275f278ca fix: type the model notes filter 2026-10-21 05:17:16 +02:00
Abdessamad Derraz 79d3a86db7 chore: drop an unused import in export tests 2026-10-21 05:17:10 +02:00
Abdessamad Derraz 31566ce618 fix: read a past pin only for its own repository
A source_commit string from before the field was keyed by mode pinned
the standalone repository, yet was read as a writing pin for every mode.
xenia-edge then saw its libretro pin move under unchanged prose, and
the recale and bump were refused.
2026-10-21 05:17:01 +02:00
Abdessamad Derraz 8a19d647a8 fix: pass -v and every short flag to install.py
A [Parameter()] attribute made install.ps1 an advanced script: its common
parameters took -v (-Verbose), -vb, -d and -ea before install.py saw them,
and the scriptblock form printed PowerShell's own VERBOSE lines. The
wrapper now forwards $args as typed.
2026-10-21 05:16:52 +02:00
Abdessamad Derraz 32dcfcf85a fix: list every copy of a file in the DAT
The collection DAT held the one path per content the database keeps, so
auditing bios/ with it read 2,502 copies (RPG Maker, engine trees, dumps
filed under two consoles) as unknown files. It now lists every path under
bios/ that holds a file, 22,028 roms for the 22,031 files on disk, the
other three being .gitkeep placeholders.
2026-10-21 05:16:19 +02:00
Abdessamad Derraz 1392f00c8d fix: replace a link at a standalone copy's name
A link already at the destination was skipped without a word and counted
as "dir not found" while the folder existed, so the emulator kept the file
the link pointed at. The link now gives way to the file, written beside it
and renamed over the name, and a name leading out of the folder is a named
failure.
2026-10-21 05:16:16 +02:00
Abdessamad Derraz 9b1d378d2f fix: never truncate a copy another run renames
On Windows a verified partial copy is closed before its rename. A second
run that claimed it in that moment truncated it and the first rename failed
with a sharing violation, reported as an unwritable folder. A complete
partial is now left whole there, the rename waits for a sharing violation
to clear, and a sharing violation no longer reads as a refused folder.
2026-10-21 05:16:12 +02:00
Abdessamad Derraz c638c12ca8 fix: replay the builder's held and one-file groups
install.region_drops now skips one-file groups (:file:) and lets no
omitted match displace an installable file, as region.resolve_region_drops
does on the builder side. The property test draws both cases and
compares against the builder.
2026-10-21 05:15:56 +02:00
Abdessamad Derraz 1a098cf975 fix: link revisions on forges profile_sync skips
parse_repo knows only the forges profile_sync fetches from, so the eduke32,
fury, dgen, skyline and splitwolf pages showed no pinned revision and
their citations stayed plain code. The pages now build commit and file
links for voidpoint.io, Bitbucket, SourceForge and Software Heritage.
2026-10-21 05:15:01 +02:00
Abdessamad Derraz 4d514336c9 fix: close a data dir refresh on its counts
refresh_data_dirs printed one line per entry and no total, a dry run named
the cached tag only, and cutting a quoted ETag at 12 characters kept one
quote. The run now ends on refreshed / up to date / failed counts, a dry
run shows the remote tag beside the cached one, and tags lose their quotes
before they are cut.
2026-10-21 05:14:55 +02:00
Abdessamad Derraz 64b2967ffb fix: read a source_ref role per part, prose too
The role a part writes (source or upstream) was kept per path, first
met first kept, so a later part naming the other role was read in the
other repository. In prose the word source made a citation external
and the word upstream was dropped. The role now travels on each part.
2026-10-21 05:14:47 +02:00
Abdessamad Derraz d9548e3522 fix: count a recalbox element kept as written
An element whose md5 the truth contradicts without naming another is
written back whole. It was counted as an entry the format cannot keep.
It now counts as kept, and the md5 it keeps is named as withheld.
2026-10-21 05:14:44 +02:00
Abdessamad Derraz 842d313a88 fix: keep truth model notes out of the native rows
check_freshness --only native rebuilds the truth model to compare it, and
the hash conflict notes generate_truth reports opened the freshness output.
They are dropped there, and any other stderr line still passes through.
2026-10-21 05:13:59 +02:00
Abdessamad Derraz 4a6b654bdc fix: keep a romm entry whole without a size
RomM compares file_size_bytes with the entry's size before any hash. A
new hash the truth gives no size for went out beside the old size and
was reported as a size removal. The entry now stays as written and the
correction is withheld and named.
2026-10-21 05:13:46 +02:00
Abdessamad Derraz 4670e0442e fix: withhold a mister hash only beside a size
An entry that states no size has none to contradict: the hash is written
as before.
2026-10-21 05:13:46 +02:00
Abdessamad Derraz 7fdf17f77e docs: drop launcher prose from hatari tos.img
8dc485dc moved the TOS names into each platform's launchers: records,
but the tos.img notes still described the Batocera, Recalbox and
RetroBat generators and an aliases field the entry no longer has.
2026-10-21 05:13:34 +02:00
Abdessamad Derraz f6b6c8cd08 fix: list an alias's data tree on its parent page
Data directory owners were picked among every profile, aliases included,
and an alias has no page: the 90 FreeIntv overlays linked to
emulators/freeintv_ts_overlay/, a 404. Only a profile with a page owns a
tree now, and a page lists the trees of the aliases that point at it.
2026-10-21 05:13:33 +02:00
Abdessamad Derraz 742b1f584f fix: keep sonic3-air notes to the engine's code
The three data package notes cited Batocera's sonic3-air.mk:40, a
package recipe outside the declared repository, so profile_sync
reported it absent for good. The engine data note now cites
EngineMain.cpp by its full path.
2026-10-21 05:12:35 +02:00
Abdessamad Derraz 9c2f49720d feat: flag a changed .info of a profiled core
The coreinfo area compared .info names only: a firmwareN_path added to a
profiled core's .info came out OK. check_freshness now compares each
profiled .info's git blob with platforms/_core_info.json, recorded on
2026-10-21 from the current listing, and --record-coreinfo CORE records
one as reviewed.
2026-10-21 05:12:34 +02:00
Abdessamad Derraz 0145e6bfc8 fix: link file cards to the entry that reads them
A directory entry was joined to the collection by its own name, so the
11,976 files under alephone's Plugins/ and the cdogs, thextech and
easyrpg trees named no emulator on their card. FileConsumers now expands
the directory and records which entry reads each file. The emulator links
on a file card land on that entry, and a directory card names its copies
and the folder that holds them.
2026-10-21 05:12:33 +02:00
Abdessamad Derraz 53121c1a5d fix: hold published targets to the builder's set
The check walked the published keys only and skipped null lists: a
target the builder knows and the installer lacks, or a null left behind
once the builder filters it, passed. It now compares both key sets and
every value, null included.
2026-10-21 05:12:32 +02:00
Abdessamad Derraz d48e81861c fix: keep a mister entry whole without a size
Downloader rejects an entry without an integer size (db_entity.py:187)
and compares it after each fetch (fetch_file_worker.py:127). A new hash
the truth gives no size for is withheld and named, not written beside
the old size nor reported as a size removal.
2026-10-21 05:12:02 +02:00
Abdessamad Derraz 8931d738dc fix: read fbalpha2012 hiscore.dat from save dir
HiscoreInit opens <g_save_dir>/hiscore.dat (hiscore.cpp:411). Without
load_from the entry was packed at bios/hiscore.dat and took the slot
mame2000 reads on RetroDECK, which now gets its sha1-pinned file.
2026-10-21 05:11:36 +02:00
Abdessamad Derraz 443aab68b7 fix: name an untracked bios file as uncommitted
The release-source check called any uncommitted repo_path gitignored,
pointing at the release assets instead of a missing commit, and its
skip outside a checkout could not fire. It now asks git which paths are
ignored, and a new check requires bios/ to hold no untracked file.
2026-10-21 05:11:23 +02:00
Abdessamad Derraz 2e29b3be03 fix: read recalbox mandatory per named core
An element lists its cores. Its mandatory flag now follows whether those
cores need the file, and stays as written where none of them reads it.
cdi/cdibios.zip keeps mandatory=false (same_cdi does not read it), the
two amiberry kickstarts keep theirs, saturn_bios.bin becomes optional
for the three HLE cores it names.
2026-10-21 05:10:54 +02:00
Abdessamad Derraz 37a5bd05ff docs: state .info facts in profile notes
Ten notes and comments called .info entries phantom, misleading or
incorrectly written. They now say what the .info declares and what
the code reads, and a prose test refuses those verdicts in profiles.
2026-10-21 05:10:45 +02:00
Abdessamad Derraz 9ad9b7ab3a fix: diff every field a platform rescrape writes
diff_platform compared only version, files and core lists: a rescrape
that changed launchers, dual_mode_cores or a system's core, native_id or
data_directories came out identical. Every other field is now compared,
without the revision read (source) and the source_ref lines that move with it.
2026-10-21 05:10:05 +02:00
Abdessamad Derraz f7d561e42f fix: store already-compressed pack members
Every member was deflated, archives and PNGs included. On the 2026-10-20
RetroArch pack the .zip, .7z, .chd, .png, .ogg and .pk4 members are 2.1 GB
that took 28 s to deflate again for 9.6 MB saved (0.45 %), and about 16 GB
for 72 MB across all packs. Those formats are now stored. The choice reads
the member name only, so a pack stays byte-reproducible.
2026-10-21 05:10:00 +02:00
Abdessamad Derraz 90e54dcb43 fix: show every field of structured profile blocks
The analysis and firmware blocks printed their source_ref as plain code,
dropped any list or map inside a list item (cemu's firmware title
contents), cut values at 200 characters and let a folded note's second
line leave its admonition. Citations are now pinned links and every
value is shown on its own line.
2026-10-21 05:09:56 +02:00
Abdessamad Derraz d7ae914b4d fix: guard every private name in tracked text
The pattern caught one notes file and missed the two others and the
notes directory that the same exclude list keeps out of the repository.
2026-10-21 05:09:27 +02:00
Abdessamad Derraz fbf7cb191b fix: keep recalbox composite md5 on archives
Bios.cpp:64-68 hashes a .zip with Zip::Md5Composite, the md5 of its
members in name order. A profile's md5 on an archive is the container's,
so it neither pairs with, corrects nor fills that field, and an archive
addition with only a container md5 is left out.
2026-10-21 05:08:45 +02:00
Abdessamad Derraz fbc8b1877e fix: build the site in pull request validation
mkdocs was installed by the deploy alone, after the merge, and wiki/
was not a validation path: a dead link or a stray heading failed the
deploy on main with nothing in front of it. The test job now runs the
deploy's site build, and every site input triggers validation.
2026-10-21 05:08:37 +02:00
Abdessamad Derraz 76b41741ec fix: count bundled files apart on the gaps page
The summary, the provenance table and the per-emulator Missing column
summed the report's gap_missing, which counts files the emulator's own
package installs: 1,356 files to source where 609 are. They get their
own row and column now.
2026-10-21 05:08:19 +02:00
Abdessamad Derraz b44d57a32f fix: pin nicaiemu to the last nicaiemu build
The repository was renamed to CoolbarEmu (PR #78) and its buildbot
recipe now builds coolbaremu. Hold the profile on 4c9b73f7, the last
revision built as nicaiemu, and document the orientation list it reads
from the system directory.
2026-10-21 05:08:00 +02:00
Abdessamad Derraz 38444404d1 fix: surface data rows that name no registry key
The buildbot system row was planned as refresh_data_dirs.py --key
'buildbot system', which always exits 1 on an unknown key. A data row now
runs only when its subject is a _data_dirs.yml entry; the rest is shown
for a human to add.
2026-10-21 05:08:00 +02:00
Abdessamad Derraz 6318eaa28b fix: refuse a platform scrape that lists no file
scraper_cli wrote a platform YAML with no system when the parse came back
empty, and exited 0. It now exits 1 before writing, unless the scraper
declares lists_files = False (RetroPie, whose files are inherited); RetroPie
in turn raises when its archive declares no package.
2026-10-21 05:07:33 +02:00
Abdessamad Derraz ddfac4a059 fix: label every platform that pulls all libretro
The cross-reference page read the label from the shape of cores:, so
RetroPie and RetroDECK, which name retroarch in a list, showed no
"(all libretro)". The label now comes from the resolved core set.
2026-10-21 05:07:09 +02:00
Abdessamad Derraz ae874534e2 fix: reread a contradicted hash from disk
_stable_hashes retried through the hash cache, so both retries returned
the first reading and the file was read once before the manifest run
stopped. The retries now read the file again.
2026-10-21 05:07:06 +02:00
Abdessamad Derraz fe652bf508 docs: keep neutral wording on every site page
The gaps page called each platform's file a corrected list, a word the
exports page test already kept off that page. The test now reads the
text of every site generator.
2026-10-21 05:06:37 +02:00
Abdessamad Derraz 8008439033 fix: keep manifests and target lists apart
Both are written as <platform>.json. --manifest-targets aimed at install/
replaced install/retroarch.json with a target table, and --manifest aimed
at install/targets/ did the reverse, both with exit 0. Each mode now stops
when the output directory holds the other kind and names the directory to
use.
2026-10-21 05:06:36 +02:00
Abdessamad Derraz fb639647e6 fix: resolve a loose archive entry by its members
gngeopi and neo-emu declare neogeo.zip loose and, apart, the ROMs they
open inside it. The archive pass took the copy holding them, the loose
entry resolved by name to another copy, and both verify --emulator and
the emulator pack reported the archive missing while the ZIP held it.
with_archive_members() gives the loose entry the members in verify, the
pack, slots and the gap report.
2026-10-21 05:05:54 +02:00
Abdessamad Derraz a0672d4459 refactor: derive the spelling index from its table
The index of other system spellings was rebuilt only when the page
table changed length, so a table of the same size kept the previous
links. The builder now returns its table and set_system_page_map
installs it with the index derived from it.
2026-10-21 05:05:50 +02:00
Abdessamad Derraz 5fc2423ca5 fix: apply --required-only to data directories
The Required packs and manifests carried every data tree, the FreeIntv
overlays included. A data_directories entry now accepts required: false,
and the platform, emulator and manifest walks leave such a tree out under
--required-only. FreeIntv reads its overlays only with the multi-screen
option and draws a placeholder keypad without one (src/libretro.c:294-296,
350-369).
2026-10-21 05:05:49 +02:00
Abdessamad Derraz c87c73d0a8 fix: replace the system icon cache whole
The cache was truncated and dumped in place. A concurrent build read
half a file, took it for empty, and an offline run then wrote {} over
every recorded icon. The file is now replaced through a scratch file,
merged with what another run recorded meanwhile, and left alone when
nothing new was learned.
2026-10-21 05:05:46 +02:00
Abdessamad Derraz f796155e1a fix: count only the names retropie help gains
The report listed every file a profiled core reads as added (1360),
while the export appends one name to one scriptmodule.
2026-10-21 05:05:00 +02:00
Abdessamad Derraz 981468874c fix: refuse a hash scrape that reads no BIOS set
The MAME and FBNeo hash scrapers cached an empty parse for 24 hours and
reported OK. Both now raise before writing, and an empty cache is never
served as fresh.
2026-10-21 05:04:36 +02:00