mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 08:21:02 +02:00
6c892cb7c1
Importing Red unpacked data/generated, assets/generated and rom-cache.complete straight into the save-dir root, while Blue and Yellow land under blue/ and yellow/. Red now uses cachePrefix red/ like the others. CacheFs.migrateLegacyRedCache moves a pre-existing root cache into red/ on first boot, from RomImporter.new before the readiness loop and from mountVersion, so existing installs keep their import instead of being asked for the ROM again. The move only runs when the root marker resolves to the save directory, so a dev checkout's source tree is never touched, and the portable game folder is skipped when it is the physfs source. Closes #899
70 lines
3.0 KiB
Lua
70 lines
3.0 KiB
Lua
-- Issue #899: Red's extracted cache lives under red/ like blue/ and
|
|
-- yellow/, and a legacy root cache (pre-fix installs) is migrated on first
|
|
-- boot instead of reading as "never imported".
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
if not _G.love then _G.love = require("tests.love_stub") end
|
|
|
|
local T = require("tests.harness")
|
|
local check = T.check
|
|
local eq = T.eq
|
|
|
|
local CacheFs = require("src.import.CacheFs")
|
|
local GameVersion = require("src.core.GameVersion")
|
|
|
|
eq(GameVersion.cachePrefix("red"), "red/",
|
|
"Red's cache is namespaced under red/")
|
|
|
|
-- legacy layout: the marker and both generated trees at the save-dir root
|
|
love.filesystem.write("rom-cache.complete", "rom-cache-v9:abc")
|
|
love.filesystem.write("data/generated/maps.lua", "return {}")
|
|
love.filesystem.write("data/generated/constants.lua", "return {}")
|
|
love.filesystem.write("assets/generated/fonts/font.png", "font-bytes")
|
|
|
|
CacheFs.migrateLegacyRedCache()
|
|
|
|
eq(love.filesystem.read("red/rom-cache.complete"), "rom-cache-v9:abc",
|
|
"the marker moved under red/")
|
|
eq(love.filesystem.read("red/data/generated/maps.lua"), "return {}",
|
|
"the data tree moved under red/")
|
|
eq(love.filesystem.read("red/assets/generated/fonts/font.png"), "font-bytes",
|
|
"the assets tree moved under red/")
|
|
check(love.filesystem.read("rom-cache.complete") == nil,
|
|
"the root marker is gone")
|
|
check(love.filesystem.read("data/generated/maps.lua") == nil,
|
|
"the root data tree is gone")
|
|
check(love.filesystem.read("assets/generated/fonts/font.png") == nil,
|
|
"the root assets tree is gone")
|
|
|
|
-- idempotent: a second run leaves the migrated tree alone
|
|
CacheFs.migrateLegacyRedCache()
|
|
eq(love.filesystem.read("red/rom-cache.complete"), "rom-cache-v9:abc",
|
|
"a second run keeps the migrated cache")
|
|
|
|
-- an existing red/ cache wins over a legacy root leftover: no clobber
|
|
love.filesystem.write("rom-cache.complete", "rom-cache-v9:STALE")
|
|
CacheFs.migrateLegacyRedCache()
|
|
eq(love.filesystem.read("red/rom-cache.complete"), "rom-cache-v9:abc",
|
|
"an existing red/ cache is not clobbered")
|
|
check(love.filesystem.read("rom-cache.complete") ~= nil,
|
|
"the unmigrated leftover stays (a stale-marker re-import handles it)")
|
|
love.filesystem.remove("rom-cache.complete")
|
|
|
|
-- mountVersion("red") overlays red/ at the un-prefixed paths, like blue/
|
|
love.filesystem._mounts = {}
|
|
check(CacheFs.mountVersion("red") == true, "mountVersion(red) returns true")
|
|
eq(love.filesystem.read("assets/generated/fonts/font.png"), "font-bytes",
|
|
"post-mount probe reads red assets at the un-prefixed path")
|
|
eq(love.filesystem.read("data/generated/constants.lua"), "return {}",
|
|
"post-mount probe reads red data at the un-prefixed path")
|
|
|
|
-- no legacy cache at all: migration is a no-op, not an error
|
|
love.filesystem.remove("red/rom-cache.complete")
|
|
love.filesystem.remove("red/data/generated/maps.lua")
|
|
love.filesystem.remove("red/data/generated/constants.lua")
|
|
love.filesystem.remove("red/assets/generated/fonts/font.png")
|
|
CacheFs.migrateLegacyRedCache()
|
|
check(love.filesystem.read("red/rom-cache.complete") == nil,
|
|
"nothing to migrate invents nothing")
|
|
|
|
T.finish()
|