fix: replay outer roots as the pack builds them

The ZIP replay in packextras.hidden_extras now skips roms, emulators and configs entries as the builder does, so verify and pack integrity stop counting files only the installer places. The consistency check treats the Android .nomedia marker as a pack note. MAME4droid's hiscore.dat leaves bios/: the app unpacks it from its own files.zip. VVVVVV's Make and Play data.zip is collected as a release asset, which EmuELEC declares as required.
This commit is contained in:
Abdessamad Derraz committed 2026-11-10 01:33:10 +01:00
1 parent 2dc427d5d0
commit 372d41e3b4
8 files changed
+42 -18940

No files matched your search

+1
View File
@@ -35,6 +35,7 @@ bios/Other/mame4droid-2024/data/.variants/history.db.615619e8
bios/Interplay/Descent/d1x-rebirth/d1xr-opl3-music.dxa
bios/Interplay/Descent/d1x-rebirth/d1xr-sc55-music.dxa
bios/Game Engines/Sonic 3 AIR/sonic3-air/data/audioremaster.bin
bios/Game Engines/VVVVVV/data.zip
bios/Id Software/Return to Castle Wolfenstein/demomain/pak0.pk3
bios/Id Software/Return to Castle Wolfenstein/demomain/.variants/pak0.pk3.82395c6e
bios/Id Software/Doom 3/demo/demo00.pk4
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -16,7 +16,7 @@
# and Invoke-WebRequest throws on a cut transfer before the hash is read:
# the site's build rewrites this line there (scripts/sitebootstrap.py).
$mismatchAdvice = "The download was most likely cut short: try again. Within minutes of an update of this project the two files can come from caches of different ages. Waiting five minutes settles that."
$defaultInstallSha256 = "185fa0951fa9a7cce617547c72770819ef4df08ebb3b29857126713083179fe7"
$defaultInstallSha256 = "9dcac77739d3cf609879117fb16bcf798c4b6432b8647cf49dbef52d6650adeb"
# The pin above refuses any changed byte: this cap only stops a body that
# cannot be the installer (a sign-in portal's page) before it is hashed.
$maximumInstallerBytes = 8MB
+1 -1
View File
@@ -23,7 +23,7 @@ DEFAULT_INSTALL_URL="https://raw.githubusercontent.com/Abdess/retrobios/main/ins
# curl or wget stop on a cut transfer before the hash is read: the site's
# build rewrites this line there (scripts/sitebootstrap.py).
MISMATCH_ADVICE="The download was most likely cut short: try again. Within minutes of an update of this project the two files can come from caches of different ages. Waiting five minutes settles that."
DEFAULT_INSTALL_SHA256="185fa0951fa9a7cce617547c72770819ef4df08ebb3b29857126713083179fe7"
DEFAULT_INSTALL_SHA256="9dcac77739d3cf609879117fb16bcf798c4b6432b8647cf49dbef52d6650adeb"
# The pin above refuses any changed byte: this cap only stops a body that
# cannot be the installer (a sign-in portal's page) before it is hashed.
MAX_INSTALLER_BYTES=8388608
+8 -8
View File
@@ -27,8 +27,8 @@
{
"dest": "roms/ports/retrobios/install.py",
"repo_path": "install.py",
"size": 1132111,
"sha256": "185fa0951fa9a7cce617547c72770819ef4df08ebb3b29857126713083179fe7",
"size": 1150418,
"sha256": "9dcac77739d3cf609879117fb16bcf798c4b6432b8647cf49dbef52d6650adeb",
"executable": false
},
{
@@ -71,8 +71,8 @@
"muos": {
"archive": {
"dest": "ARCHIVE/RetroBIOS.muxapp",
"size": 1185736,
"sha256": "cb245dc33b894a9720ae3734bf55512c2b0fca99e0bd33e8c12a72738085f5cc"
"size": 1204043,
"sha256": "24a025696054f5a9371eab36b0f43332ea1cd3c35a706619a6ddc2559c4aa220"
},
"members": [
{
@@ -92,8 +92,8 @@
{
"name": "RetroBIOS/install.py",
"repo_path": "install.py",
"size": 1132111,
"sha256": "185fa0951fa9a7cce617547c72770819ef4df08ebb3b29857126713083179fe7",
"size": 1150418,
"sha256": "9dcac77739d3cf609879117fb16bcf798c4b6432b8647cf49dbef52d6650adeb",
"executable": false
},
{
@@ -166,8 +166,8 @@
{
"dest": ".config/modules/retrobios/install.py",
"repo_path": "install.py",
"size": 1132111,
"sha256": "185fa0951fa9a7cce617547c72770819ef4df08ebb3b29857126713083179fe7",
"size": 1150418,
"sha256": "9dcac77739d3cf609879117fb16bcf798c4b6432b8647cf49dbef52d6650adeb",
"executable": false
},
{
+5
View File
@@ -419,6 +419,11 @@ def hidden_extras(
dest = sanitize_pack_path(fe.get("destination", fe.get("name", "")))
if not dest or (region_drops and extra_region_key(fe, region_prefix) in region_drops):
continue
if fe.get("root") in OUTER_ROOTS:
# As the builder does: the pack is extracted into the BIOS folder
# and cannot reach the roms, emulator or configs folder, the
# installer places these files.
continue
full = extra_full_destination(fe, prefix)
if not full:
continue
+7 -2
View File
@@ -77,6 +77,7 @@ from common import (
publish_hold,
)
from refresh_data_dirs import hold_data_dirs
from packpaths import MEDIA_MARKER
class StepResults(dict):
@@ -432,8 +433,12 @@ def parse_pack_paths(output: str) -> dict[str, str]:
return paths
# Members the builder writes for the reader rather than for a core.
_PACK_NOTES = re.compile(r"(^README\.txt$|^manifest\.json$|(^|/)(INSTRUCTIONS|RENAMED)_[^/]*\.txt$)")
# Members the builder writes for the reader or the device rather than for a
# core: the documents, and the empty marker an Android pack carries.
_PACK_NOTES = re.compile(
r"(^README\.txt$|^manifest\.json$|(^|/)(INSTRUCTIONS|RENAMED)_[^/]*\.txt$"
rf"|(^|/){re.escape(MEDIA_MARKER)}$)"
)
def _tree_members(
+19 -19
View File
@@ -420,13 +420,13 @@ A RetroArch dry run into an empty folder, with the list of 2026-11-09, printed t
```
Fetching file index for retroarch...
106 files read from RetroArch's save directory go to a folder per core under /home/me/.config/retroarch/saves
14985 files (7.6 GB)
3296 BIOS files (4.4 GB), 5108 game data files (3.1 GB) and 6581 data files (135.6 MB).
15013 files (7.6 GB)
3324 BIOS files (4.4 GB), 5108 game data files (3.1 GB) and 6581 data files (135.6 MB).
Game data: files a game or a game engine reads, of no use to the other cores. Data files: the files an emulator reads from a data folder of its own, such as Dolphin's Sys and PPSSPP's assets.
Not installable: 76 files are not in the collection, 1 of them required.
Not installable: 156 files are not in the collection, 1 of them required.
Checking existing files...
0 in place, 14985 missing, 0 wrong copies
0 in place, 15013 missing, 0 wrong copies
```
<!-- /generated: dry-run -->
@@ -486,13 +486,13 @@ few minutes on a memory card, because every file is hashed:
```
Fetching file index for batocera...
23 files read from Batocera's save directory go to a folder per system under /userdata/saves
18181 files (9.3 GB)
3165 BIOS files (4.3 GB), 11544 game data files (4.8 GB) and 3472 data files (81.8 MB).
19062 files (10.0 GB)
3804 BIOS files (5.3 GB), 11550 game data files (4.6 GB) and 3708 data files (81.9 MB).
Game data: files a game or a game engine reads, of no use to the other cores. Data files: the files an emulator reads from a data folder of its own, such as Dolphin's Sys and PPSSPP's assets.
Not installable: 444 files are not in the collection, 79 of them required.
Not installable: 675 files, 79 of them required. Why: no system runs the core (83), not found (592).
Checking existing files...
0 in place, 18181 missing, 0 wrong copies
0 in place, 19062 missing, 0 wrong copies
```
<!-- /generated: run-index -->
@@ -507,10 +507,10 @@ as the log of the run below:
<!-- generated: run-download -->
```
Downloading 14709 files (9.2 GB)...
Downloading 15354 files (9.9 GB)...
Press Ctrl+C to stop. Running the same command again carries on from here.
[1/14709] panafz1.bin ok
[2/14709] panafz10.bin ok
[1/15354] panafz1.bin ok
[2/15354] panafz10.bin ok
```
<!-- /generated: run-download -->
@@ -522,10 +522,10 @@ command again picks up where it stopped.
<!-- generated: run-end -->
```
Done. 18181 files installed.
Installed: 3165 BIOS files, 11544 game data files and 3472 data files.
Done. 19062 files installed.
Installed: 3804 BIOS files, 11550 game data files and 3708 data files.
BIOS folder: /userdata/bios
444 files were not installed: the collection does not hold them, or its copy fails their check.
675 files were not installed: the collection does not hold them, or its copy fails their check.
Not available here: DARK.GOB, DARKWAR.RTL, DARKWAR.WAD and 76 more, game data their games read. Copy them from an owned copy of the game into /userdata/bios/, /userdata/bios/Source/, /userdata/bios/base/ and 10 more folders.
Game data: files a game or a game engine reads, of no use to the other cores.
To check this later, run the same command with --check.
@@ -573,7 +573,7 @@ The same command with `--check` reads the folder and writes nothing:
```
Checking existing files...
18181 in place, 0 missing, 0 wrong copies
19062 in place, 0 missing, 0 wrong copies
Every file on the list is in place.
```
@@ -767,8 +767,8 @@ by `scripts/generate_installer_doc.py`):
<!-- generated: line-menu -->
```
RetroArch: 14985 files, 7.6 GB.
3296 BIOS files (4.4 GB), 5108 game data files (3.1 GB) and 6581 data files (135.6 MB).
RetroArch: 15013 files, 7.6 GB.
3324 BIOS files (4.4 GB), 5108 game data files (3.1 GB) and 6581 data files (135.6 MB).
Game data: files a game or a game engine reads, of no use to the other cores. Data files: the files an emulator reads from a data folder of its own, such as Dolphin's Sys and PPSSPP's assets.
BIOS folder: /home/me/.config/retroarch/system
Not available here: jazz2/Source/Anims.j2a (Jazz Jackrabbit 2), game data its game reads. Copy it from an owned copy of the game into /home/me/.config/retroarch/system/jazz2/Source/.
@@ -781,8 +781,8 @@ RetroArch: 14985 files, 7.6 GB.
Counted again for these choices. Nothing is written before Enter.
RetroArch: 9877 files, 4.5 GB.
3296 BIOS files (4.4 GB) and 6581 data files (135.6 MB). 5108 game data files left out.
RetroArch: 9905 files, 4.6 GB.
3324 BIOS files (4.4 GB) and 6581 data files (135.6 MB). 5108 game data files left out.
Game data: files a game or a game engine reads, of no use to the other cores. Data files: the files an emulator reads from a data folder of its own, such as Dolphin's Sys and PPSSPP's assets.
BIOS folder: /home/me/.config/retroarch/system
Same choice without questions: python3 install.py --platform retroarch --dest /home/me/.config/retroarch/system --no-game-data