Treat headless cache reads as misses in CacheFs

The modkit validate and pack drivers run the real loader under plain
luajit, with no love global.  With --base imported, Data:load falls
back to CacheFs.readActive for a generated module require cannot find
(an optional module like data/generated/audio.lua is legitimately
absent from developer and stale caches), and CacheFs.read indexed
love.filesystem once there was no portable root, so validate and pack
died with MK100 before the mod was even looked at.  Headless there is
no save directory to read from, so return nil like any other cache
miss.

Refs #850
This commit is contained in:
johnjohto
2026-08-05 10:25:19 -04:00
parent f0ed2efe07
commit 8f0117a145
2 changed files with 23 additions and 0 deletions
+3
View File
@@ -294,6 +294,9 @@ function CacheFs.read(rel)
f:close()
return data
end
-- headless (plain luajit, e.g. the modkit validate/pack driver): there is
-- no save directory to read from, so a cache miss is nil, not a crash
if not (love and love.filesystem) then return nil end
return love.filesystem.read(rel)
end
+20
View File
@@ -0,0 +1,20 @@
-- CacheFs stays headless-safe: plain luajit has no love global, and the
-- modkit validate/pack driver reaches CacheFs.read through Data:load when
-- an optional generated module (audio) is missing from the checkout
-- (issue #850). With no portable root and no love there is no save
-- directory to read from, so the read is a nil miss, not a crash.
package.path = "./?.lua;./?/init.lua;" .. package.path
local T = require("tests.harness")
local check = T.check
check(_G.love == nil, "suite runs with no love global")
local CacheFs = require("src.import.CacheFs")
check(CacheFs.read("data/generated/audio.lua") == nil,
"read is a nil miss headless, not a crash")
check(CacheFs.readActive("data/generated/audio.lua") == nil,
"readActive is a nil miss headless, not a crash")
T.finish()