Commit Graph
285 Commits
Author SHA1 Message Date
Abdessamad Derraz 5ce2b44a57 fix: fill placeholders in emulator packs
LRPS2 declares only <bios>.bin, so its emulator pack shipped no PS2 BIOS. The images in the folder another PS2 profile proves by hash, of the declared size, now take the placeholder's place in the pack and in verify.
2026-10-19 04:11:19 +02:00
Abdessamad Derraz 953e943d2d fix: count data trees apart in emulator packs 2026-10-18 20:41:39 +02:00
Abdessamad Derraz 9a417dde2a fix: fail --verify-packs when no pack was checked 2026-10-18 20:39:14 +02:00
Abdessamad Derraz ff3428e1f1 fix: resolve manifest core files like the pack
The manifest resolved core files without the data directories: blueMSX's pack carried its own MSX2P.rom while the manifest named another dump for the installer.
2026-10-18 19:46:03 +02:00
Abdessamad Derraz 4246d9ec66 fix: name a target only where it narrows the pack 2026-10-18 19:44:47 +02:00
Abdessamad Derraz 9c154a29b9 fix: join system names with a separator they lack 2026-10-18 19:43:40 +02:00
Abdessamad Derraz c2e3d64343 fix: keep only the system's entries in --system
A multi-system profile shipped every entry: the Lynx system pack carried 34 PlayStation, Saturn and Apple II files from mednafen. The entry's own system decides, as the platform pack and the installer already do.
2026-10-18 19:39:28 +02:00
Abdessamad Derraz 1c7b2e85a4 fix: resolve nameless md5 entries as verify does 2026-10-18 18:18:19 +02:00
Abdessamad Derraz 34c8b925d7 fix: count a shared destination once, filled
verify kept the worst verdict on the raw destination, the builder the first one it read. Both now key on the sanitized path and let a declaration that holds a file fill one that finds nothing.
2026-10-18 18:17:28 +02:00
Abdessamad Derraz 8e067c1c3a fix: name the packs that fail verification 2026-10-18 16:21:54 +02:00
Abdessamad Derraz def1e80232 fix: fail a named pack that is not built 2026-10-18 16:20:33 +02:00
Abdessamad Derraz 10cfdb4de0 feat: install the data trees the pack carries
Manifests list each data directory's source archive and the hash of
every file; the installer rebuilds the tree from the archive and keeps
only the files whose hash matches.
2026-10-18 16:18:39 +02:00
Abdessamad Derraz dbd47886ce fix: name release assets as GitHub serves them 2026-10-18 14:49:00 +02:00
Abdessamad Derraz 9ea1630caa feat: install case twins where case is kept
The RetroArch list is folded for Windows and macOS. Its manifest
now carries the names a case-keeping directory also needs, and the
installer adds them after probing the BIOS directory.
2026-10-18 13:52:37 +02:00
Abdessamad Derraz df597cbe7d fix: hold data trees while packs are verified 2026-10-18 13:46:11 +02:00
Abdessamad Derraz c597df2a32 fix: swap in the pack after adding its manifest 2026-10-18 13:45:00 +02:00
Abdessamad Derraz 1f942770d5 fix: rank only held files in a slot 2026-10-18 13:43:41 +02:00
Abdessamad Derraz bfa6c51ff5 fix: report an archive another profile masks 2026-10-18 13:00:38 +02:00
Abdessamad Derraz 92fb885341 fix: accept platform names as the site prints them 2026-10-18 08:49:41 +02:00
Abdessamad Derraz b23f5b04ad fix: refuse a --bios-dir that does not exist 2026-10-18 08:39:27 +02:00
Abdessamad Derraz 4240c98359 fix: name a missing database in one error line 2026-10-18 08:34:09 +02:00
Abdessamad Derraz 1305516e87 docs: say --offline cuts release asset downloads 2026-10-18 07:30:56 +02:00
Abdessamad Derraz ae3dc63bc3 fix: accept RomM files on size and any hash
RomM's verify_file_hashes compares the size, then md5, sha1 or crc. We
compared md5 alone, so a fixture entry with one mistyped hash was left out
of the pack RomM would accept it from. The rule is declared in romm.yml
and read by verify, the builder and the manifest.
2026-10-18 07:24:33 +02:00
Abdessamad Derraz d6d03617db fix: exit 1 when a hash lookup finds nothing
The documented example looked up a test fixture hash, printed NOT FOUND
and exited 0. The docs now use a hash the database holds and say which
line forms a hash file accepts.
2026-10-18 07:19:01 +02:00
Abdessamad Derraz e1b6aad51b fix: refuse abbreviated flags in every script
argparse completed a prefix into the only flag starting with it:
slots.py --emulator read profiles from a directory named after the
emulator and reported nothing, and pipeline.py --all built every pack
variant. Every parser now refuses an abbreviation.
2026-10-18 05:30:58 +02:00
Abdessamad Derraz baf635cf4e fix: refuse to pack an archive that fails its CRC
The deterministic rebuild raises on a member whose bytes fail their
CRC, and the builder caught it and copied the damaged archive into
the pack, expecting verify to flag it, which nothing did. The run now
stops on it and names the file to restore.
2026-10-18 05:15:15 +02:00
Abdessamad Derraz 91b378d641 fix: copy standalone files from their pack path
The registry names one path per standalone copy for every platform,
but each manifest places the file its own way, so the installer
looked where the pack had put nothing and copied nothing: EmuDeck's
aes_keys.txt for Azahar, Batocera's switch/prod.keys. Each manifest
copy now names its source, which the installer validates and reads.
2026-10-18 05:09:05 +02:00
Abdessamad Derraz ef0023d78c fix: key the manifest hash cache by its check
The cache of manifest hashes was keyed by the database's id without
holding the database, so a freed database replaced at the same
address got another scan's verified hashes back. The key now carries
the sha1 that database expects for the path.
2026-10-18 04:13:32 +02:00
Abdessamad Derraz 383960212d fix: swap a pack in only once it is complete
Packs were opened on their final name, so a rebuild truncated the
previous one and a build that failed half way left a readable ZIP
of part of the files. Each pack is now written beside its name and
replaces it only when the write finished.
2026-10-18 03:54:59 +02:00
Abdessamad Derraz 2dcb49fa4c fix: keep a held file in emulator region packs
Emulator mode reduced region groups without knowing which files the
collection holds, so a requested-region image nobody had collected
withdrew the held one and left the slot empty. Platform mode already
kept it; both emulator readers now pass the database.
2026-10-18 03:52:47 +02:00
Abdessamad Derraz 44d363e739 fix: name a target the way each platform files it
A target was canonicalised once for the run and kept as typed under
--all when platforms file it differently, so the --all build and a
--platform check named the same Batocera pack two ways. Each pack,
group, manifest and expected name now takes the target as its own
platform files it.
2026-10-18 02:53:33 +02:00
Abdessamad Derraz 78902ccc6a fix: name the flag one-per-slot conflicts with
--platform --system --one-per-slot was refused with a message
asking for --platform, which the command carried. The refusal now
names --system or --emulator, and every refusal in the mode matrix
is checked never to ask for a flag it was given.
2026-10-18 02:52:02 +02:00
Abdessamad Derraz 9ba63e6a54 fix: refuse a platform list where one is taken
generate_pack split --platform on commas to validate it, then used
the whole string as one platform and crashed. Every script takes a
single platform; a list is refused with a message pointing at --all.
2026-10-18 02:50:58 +02:00
Abdessamad Derraz 5961b6bfe7 refactor: annotate the shared pack and lock api 2026-10-18 00:03:59 +02:00
Abdessamad Derraz 5ae83ba2fa refactor: hash each manifest file once 2026-10-17 23:54:20 +02:00
Abdessamad Derraz 09eb4f4ef3 fix: show exclusions and every verify-packs error 2026-10-17 23:05:48 +02:00
Abdessamad Derraz 0bac022c2b fix: replay absent core claims when narrowing 2026-10-17 22:21:50 +02:00
Abdessamad Derraz 55631a2fbc fix: end listings quietly when the reader leaves 2026-10-17 20:50:22 +02:00
Abdessamad Derraz de8e7ff02e fix: separate message parts with a colon 2026-10-17 20:47:22 +02:00
Abdessamad Derraz 262cb5e438 fix: list core files nobody holds as omissions 2026-10-17 20:28:31 +02:00
Abdessamad Derraz 4a09412ae6 fix: fail a pack run missing its data directories 2026-10-17 19:41:35 +02:00
Abdessamad Derraz 18e61fabcb refactor: read the asset registry with one parser
generate_pack kept a private .gitignore parser whose cache ignored the
root it was asked about, and generate_db a copy of the shared one. Both
now read largefiles.load_registered_paths, cached per root. Test modules
whose main block preceded their last class end with it again.
2026-10-17 19:35:42 +02:00
Abdessamad Derraz 1ffc0a6937 fix: hold data directories while packs read them 2026-10-17 19:22:50 +02:00
Abdessamad Derraz c7737d629e fix: publish target lists as the builder reads 2026-10-17 19:16:30 +02:00
Abdessamad Derraz e6c29452f9 fix: never drop a held file for a missing region
Region filtering ranked every declared file, held or not, so a request
answered only by a missing file dropped the held fallback and emptied
the slot. Only held files now decide what gives way; the missing better
match stays reported.
2026-10-17 18:31:56 +02:00
Abdessamad Derraz 2e52f06896 fix: accept every version a profile lists by name
A profile lists each version its code takes under one name. The core
extra carries the first; a held copy matching another entry of the same
profile is no longer reported as a hash discrepancy.
2026-10-17 18:11:38 +02:00
Abdessamad Derraz 426d3c619d fix: let a platform's only target filter nothing 2026-10-17 14:48:35 +02:00
Abdessamad Derraz feb3b03a39 fix: suggest the nearest system or emulator name 2026-10-17 12:44:22 +02:00
Abdessamad Derraz b6331a765a fix: name the platform a typo was meant to be 2026-10-17 12:28:27 +02:00
Abdessamad Derraz a51003499f refactor: drop imports the builder no longer uses 2026-10-17 11:50:00 +02:00