Commit Graph
2126 Commits
Author SHA1 Message Date
Abdessamad Derraz a29b836730 chore: merge installer fixes, fourth pass 2026-11-06 10:28:14 +01:00
Abdessamad Derraz e491ff1bc6 chore: merge tooling fixes, fourth pass 2026-11-06 09:50:16 +01:00
Abdessamad Derraz 2c60b5f20d docs: refresh_stale names pin_installer plainly
The docstring line naming pin_installer.py read as a clause after a
semicolon, which the prose test refuses.
2026-11-06 09:43:07 +01:00
Abdessamad Derraz 21f4122c83 fix: collisions keep the platform's order
Walking the systems sorted reordered the declarations doubled.py
reports from, so the export report named the CoCo reader first. The
declarations keep the platform's order again, and the packed file is
picked from the sorted walk the builder makes.
2026-11-06 09:43:06 +01:00
Abdessamad Derraz 79a21ba1f1 feat: name the files in emulator search snippets
A search for gba_bios.bin or scph5500.bin landed on a page described as
"It reads 4 files, none of them required". The snippet now names the
console and the files, required first, in the longest form that fits.
2026-11-06 09:28:03 +01:00
Abdessamad Derraz ada7738fa7 feat: pin_installer writes the installer pins
Every change to install.py meant a sha256sum pasted by hand into
install.sh and install.ps1, and the tests that caught a stale pin
failed on two bare hashes. scripts/pin_installer.py writes both pins
(--check only reports), the pin tests name it, check_freshness reads
the pins through it and refresh_stale runs it for a stale pin row.
2026-11-06 09:02:18 +01:00
Abdessamad Derraz 725325f0a1 fix: announce a data tree at its archive size
A tarball tree was announced at its extracted size: yaps2 at 6.5 MB for a 21.2 MB download, Cemu's game profiles at 9.9 KB for 21.4 MB. refresh_data_dirs records the size of each archive it downloads (a tree current from before is measured, not refetched), the install lists carry it as archive_size, and the plan, the menu and the data event count it.
2026-11-06 08:59:10 +01:00
Abdessamad Derraz 01ce92232d docs: say how an uploaded ZIP is read
CONTRIBUTING and the site's contributing page now say that a ZIP no
list declares as a whole is read file by file, and that the files go in
unzipped.
2026-11-06 08:58:40 +01:00
Abdessamad Derraz 5407eafe5b feat: validate_pr reads an undeclared ZIP's files
A card's BIOS folder zipped to upload it was hashed as one file and
reported not recognised, its contributor asked where the dump came from
and told to place it under bios/. A ZIP no list or profile declares as a
whole is now read member by member: each is named held, declared and not
held, or not recognised, and the contributor is asked for the files
unzipped. A declared archive (a MAME or FBNeo set) is never opened.
2026-11-06 08:57:15 +01:00
Abdessamad Derraz 320db75490 fix: check_freshness aligns details after remotes
render padded the local value but not the remote one, so in an area
where some rows carry a remote value their detail started fifteen
columns later than the rows without one. The remote value is padded to
its column, and a row without one leaves the same blank span.
2026-11-06 08:56:32 +01:00
Abdessamad Derraz 8b7e5ceef4 fix: refresh_stale knows the romfolders area
check_freshness gained a romfolders area and refresh_stale did not:
its rows were dropped from a saved report without a word, and --only
romfolders was refused. A rom-folder pin is moved by hand, so the area
is listed for a human, a test holds the two area lists equal, and the
--only help names every area.
2026-11-06 08:56:14 +01:00
Abdessamad Derraz ea58f6f5ce fix: refresh_stale --dry-run honours --json
--dry-run printed its text plan and returned before --json was read,
so a caller parsing the output as JSON failed. With both flags the plan
is printed as JSON: planned jobs with their commands and follow-ups,
the rows left to a human, and the count ignored.
2026-11-06 08:55:51 +01:00
Abdessamad Derraz bf206d5b42 feat: slots names who declares a collided path
A collision line named two files and neither the system declaring each
nor the one the pack ships, so the reader went back to the platform
file. find_collisions walks the systems in the builder's sorted order,
takes the builder's preferred declaration, and the line and the JSON
now name each system and the file packed. RetroDECK's bios/disk.rom
reads as the CoCo ROM packed, the PC-88 one left out, as its manifest
holds.
2026-11-06 08:55:26 +01:00
Abdessamad Derraz a343be0da1 fix: validate_pr json says failed, not new
The JSON report put "outcome": "new" on every file without another
outcome, so a path that does not exist, or a file that failed a check,
was listed as a new contribution. A failed file now reads "failed".
2026-11-06 08:54:23 +01:00
Abdessamad Derraz a1ddee8e5e fix: a lock reader refuses a missing directory
artifact_lock created its directory even for a shared reader, so a
mistyped path given to --verify-packs or release_record was left as a
directory holding a .lock, and split_pack created the parent before
printing a bare errno. A reader now raises ArtifactDirectoryMissing,
which run_cli prints on one line, and split_pack checks its target
before taking the lock.
2026-11-06 08:54:06 +01:00
Abdessamad Derraz 19dddedff6 fix: a data lock wait names its holder
A refresh blocked on a data directory lock printed only that another
run held it, then waited with no limit. The line now names the lock
file and the lsof command that shows its holder, and for a refresh,
the generate_pack --no-refresh-data and --offline runs that read the
cache without waiting.
2026-11-06 08:53:26 +01:00
Abdessamad Derraz 9f3f1cec3b fix: validate_schemas names its jsonschema install
Without jsonschema the documented command stopped on an ImportError
traceback. Run as a command it now prints the install pipeline.py names
for the same step, with the format-nongpl extra, and exits 1. An import
from the tests still raises ImportError, which they skip on.
2026-11-06 08:19:36 +01:00
Abdessamad Derraz 54eac3b2df refactor: verify keeps its lock stack name
The --destinations branch of _main rebound held, the ExitStack that
holds the data directory locks, to the dict it writes. It is now
named destinations, and a test refuses a rebinding of the stack.
2026-11-06 08:19:00 +01:00
Abdessamad Derraz dfa1cc31d3 fix: generate_truth refuses a target it lacks
--platform bizhawk --target switch printed skipped, then Done., and
exited 0 with no model written. generate_truth now resolves targets
through build_target_cores_cache, as verify and generate_pack do: a
named platform without the target is refused with exit 1, --all
leaves such platforms out and says so.
2026-11-06 08:16:18 +01:00
Abdessamad Derraz 25b9c85208 fix: refuse an unreadable native sources index
_load_sources read a truncated .sources.json as empty: fetch served
the cached original of an older pin as current, the next download
rewrote the index with one entry, and check_freshness said no URL was
recorded. It now raises SourcesIndexUnreadable naming the remedy, and
check_freshness reports one ERROR row for the index.
2026-11-06 08:15:15 +01:00
Abdessamad Derraz afceabaf3c fix: bios_integrity stops when git fails
modified_for_git read the stdout of git status without its exit code:
a corrupt index printed nothing, the working change read as unmodified,
and --apply wrote HEAD's blob over it. Every git call now raises on a
non-zero status, and the command exits 2 naming the git error.
2026-11-06 08:14:17 +01:00
Abdessamad Derraz 57ccca640a refactor: importers write through write_if_changed
game_dat_importer and arcade_parent_importer each kept an exact-text
copy of write_if_changed, so a redump refresh rewrote every catalog for
its fetched date alone. Both now use artifacts.write_if_changed, which
treats fetched as a timestamp. A No-Intro rebuild still rewrites its
catalogs, since asset_updated_at moves with it, so check_freshness keeps
reading a fetched date no older than the pack.
2026-11-06 08:13:32 +01:00
Abdessamad Derraz 5c93c6dc6b refactor: one emudeck script-to-profile rule
The target scraper kept its own copy of the EmuScripts table and took
.ps1 files the platform scraper never read, so emudeck-we's template
skeleton was published as a core and removed afterwards by an override.
Both scrapers now read emulator_of_script, and the platform scraper
lists the installers at the pinned revision, as launchers: and the
SteamOS target already did. Targets rescraped, override dropped.
2026-11-06 08:12:19 +01:00
Abdessamad Derraz 19898cb6ea chore: merge site and docs fixes, third pass 2026-11-06 06:38:47 +01:00
Abdessamad Derraz df801fd311 chore: merge resolver and export fixes 2026-11-06 05:54:29 +01:00
Abdessamad Derraz 7cf5af2d7b docs: name Lakka among the cards found by itself
install.py tells a Lakka card by its retroarch.cfg since f8702a19f. The
FAQ and the README now name it with the other cards.
2026-11-06 05:53:19 +01:00
Abdessamad Derraz 83076818b0 chore: merge origin/main 2026-11-06 05:18:32 +01:00
Abdessamad Derraz f12ba5632b fix: run retired_files through run_cli
The new script's entry point skipped run_cli and its options were in no
tools.md row, which two suite checks hold every tracked script to.
2026-11-06 05:18:11 +01:00
Abdessamad Derraz 7a98d73d79 chore: merge engine fixes, third pass 2026-11-06 05:06:59 +01:00
Abdessamad Derraz acd2ef31fd fix: keep the Run by row out of the search
Setup names on 530 emulator pages lowered their weight in the index and
ranked the data page first for batocera folder and retroarch system
folder. The row is left out of the search, as the card's setup lists are.
2026-11-06 04:41:13 +01:00
Abdessamad Derraz 5621737c29 fix: name an emulator's packs once per page
A Packed line on each file card put the MAME parts, BizHawk, blueMSX,
FBNeo and GroovyMAME over the 10,000 element budget. The Run by row of
the page already names the setups that pack the emulator's files.
2026-11-06 04:32:04 +01:00
Abdessamad Derraz f63a84a746 fix: check validate_pr platforms after git 2026-11-06 04:25:29 +01:00
Abdessamad Derraz c137d13621 fix: readme holds the data trees in main 2026-11-06 04:25:29 +01:00
Abdessamad Derraz cf2ea6cd44 fix: annotate the emulator pack comparison 2026-11-06 04:25:29 +01:00
Abdessamad Derraz 350cd6d600 feat: keep the address of a file that left
files/?sha1= of a file the collection no longer holds answered that no
file the site knows has the hash. generate_db.py now records each sha1 a
rebuild drops in retired.json, with the day and the file in its place,
backfilled from the history since 0d586ef6b (4,139 files). The lookup
answers with it and leads to the successor's card.
2026-11-06 04:24:44 +01:00
Abdessamad Derraz b23931e14d feat: find archive members by their CRC32
The lookup held a member only where a profile's contents: declares it,
so 26,014 of the 33,403 members of collection archives answered nothing.
Each member's CRC32 is now an archive-member record leading to its
archive's card, read from the central directory, and files/ names the
archive holding it.
2026-11-06 04:12:20 +01:00
Abdessamad Derraz 0aa5dd8487 docs: name MiSTer among the cards found by itself
install.py tells a MiSTer card by its MiSTer binary and menu.rbf since
73b82375d. installer.md said so, the FAQ and the README did not, and sent a
MiSTer user to --dest the card's root, where nothing reads the files.
2026-11-06 04:09:07 +01:00
Abdessamad Derraz 47ece52410 docs: drop a semicolon in the RetroPie scraper 2026-11-06 04:07:14 +01:00
Abdessamad Derraz 78e2b85c1b refactor: pick the install box setup from guides
The default setup named RetroArch in page code, which a test forbids. It
is now the setup whose guide runs under the most of the box's OS tabs,
then on the most systems, then one with a release ZIP.
2026-11-06 04:05:20 +01:00
Abdessamad Derraz 3cb1d9c06a fix: keep the -sa name in ROCKNIX targets
The target scraper stripped -sa from every standalone package while the platform scraper keeps both spellings. vice-standalone, scummvm-standalone and supermodel3 answer to vice-sa, scummvm-sa and supermodel-sa only, so every targeted ROCKNIX build left them out. Both now read standalone_emulators(), and the targets are rescraped at tag 20261001.
2026-11-06 04:05:10 +01:00
Abdessamad Derraz 87f6211983 fix: one core name per RetroPie package
The platform scraper kept lr-dosbox-pure as dosbox-pure, which matched the standalone DOSBox Pure Unleashed profile, while the target scraper wrote dosbox_pure. Both now read core_name(), and platforms/retropie.yml is rescraped at its pinned revision 46128cd2: only the libretro core names change, and six Unleashed files leave the RetroPie manifest.
2026-11-06 04:03:36 +01:00
Abdessamad Derraz 28d310d8bc fix: preselect RetroArch in a system's install box
The box showed the first setup by name, AmberELEC on 17 system pages,
under Windows tabs. It now selects RetroArch, which runs on every system
the box has a tab for, else a setup the release publishes a ZIP for.
2026-11-06 04:02:14 +01:00
Abdessamad Derraz 39e6afbeb2 fix: a size kept in bios_db.json is not removed
When the truth accepts the BiosDB hash but none of its sizes fits, the MiSTer render keeps the entry's size beside the hash, and the report still counted a size removed. A size the truth does not state is no longer reported as changed.
2026-11-06 04:00:47 +01:00
Abdessamad Derraz 290c0b73ff fix: a container md5 leaves a zippedFile md5 alone
Batocera and KNULLI check a zippedFile item's md5 against the member inside the archive. A profile's container md5 for the archive would have replaced it as a correction. The item's md5 is now read as Recalbox's composite md5 is: neither compared with the container's nor overwritten by it.
2026-11-06 04:00:15 +01:00
Abdessamad Derraz 6427e46e25 fix: an empty or HTML original fails the export
fetch checked archives only, so a System.dat served as an HTML page with 200, or a 0-byte cache, reached render() as a file with no entries. System.dat, es_bios.xml, RetroBat and RomM then rebuilt the platform's file from our data and reported OK. Such an original is now refused, before it is cached and when read from the cache, and a format that needs its original fails when none was read.
2026-11-06 03:59:07 +01:00
Abdessamad Derraz 6015552fb2 fix: offer Lakka's card route from Linux only
Lakka keeps /storage on the card's ext4 partition (Lakka-LibreELEC
4696b48f scripts/mkimage:72, 95), which Windows and macOS do not open, and
its page offered them a card route. card_run is now [linux], and a page
with no Windows route says only Linux opens the card.
2026-11-06 03:58:38 +01:00
Abdessamad Derraz d5e61308e1 fix: additions join the native id their cores read
A platform system spanning several native ids with no native_id filed every addition under the id that sorts first: RetroDECK's arcade wrote MAME device archives as FBNeo BIOS, RetroBat's Amiga put A500 kickstarts under amiga1200. An addition now joins the id whose declared files its cores read, and one the cores do not settle is counted and not written.
2026-11-06 03:57:39 +01:00
Abdessamad Derraz 7d2c393118 fix: provenance gaps read held names by index
profile_needs decided held-ness from each record's own name. np2pi's KANJI2.ROM, held as the PC-88 n88knj2.rom, was listed missing and paired with a Fujitsu dump. It now reads by_name as verify does, and an unsourceable entry is not held by a homonym, which lists xm7's KANJI.ROM.
2026-11-06 03:53:26 +01:00
Abdessamad Derraz d1bf77a09c fix: write PS2 companions as PCSX2 opens them
PCSX2 stats <bios>.rom1 then <stem>.rom1, case-sensitive on Linux (BiosTools.cpp:214-229), and so does PCSX2 1.6 for erom. The pack wrote the stored SCPH-70004.ROM1, never found. A companion entry also seeded a scan of its own with a 4 MB bound and swept cheats, GameIndex.yaml and DVD firmware to the BIOS root. A companion now scans its image's folder for its own extension only, any size, since the code reads min(size, filesize), and is written as the code spells it.
2026-11-06 03:52:47 +01:00
Abdessamad Derraz cead17429b fix: compare narrowed emulator packs in step 5 2026-11-06 03:51:52 +01:00