mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-27 08:51:27 +02:00
0e8c93ec75
Drop the pointless zip wrapper around the x86_64 AppImage, harden HostShell so bundled curl keeps APPDIR libs while host curl scrubs LD_LIBRARY_PATH / Steam LD_PRELOAD, and add a Flatpak channel with --device=all, bundled curl, and AppStream releases metadata. Portable mode now probes writability with a unique temp file and falls back soft on RO mounts / Flatpak.
66 lines
2.3 KiB
Lua
66 lines
2.3 KiB
Lua
-- Portable writability probe + Flatpak skip.
|
|
-- luajit tests/engine/portable_writable_probe_test.lua
|
|
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
|
|
local T = require("tests.harness")
|
|
local check, eq = T.check, T.eq
|
|
|
|
local tmp = os.getenv("TMPDIR") or "/tmp"
|
|
local base = tmp .. "/gen1recomp-portable-probe-" .. tostring(os.time())
|
|
os.execute('mkdir -p "' .. base .. '"')
|
|
local marker = assert(io.open(base .. "/portable.txt", "wb"))
|
|
marker:write("1\n")
|
|
marker:close()
|
|
|
|
-- Minimal LOVE stubs so SaveData.gameFolders returns our base.
|
|
_G.love = {
|
|
filesystem = {
|
|
getSource = function() return base .. "/game" end,
|
|
getSourceBaseDirectory = function() return base end,
|
|
},
|
|
system = {
|
|
getOS = function() return "Linux" end,
|
|
},
|
|
}
|
|
|
|
local env = {}
|
|
local realGetenv = os.getenv
|
|
function os.getenv(k)
|
|
if env[k] ~= nil then return env[k] end
|
|
return realGetenv(k)
|
|
end
|
|
|
|
package.loaded["src.core.SaveData"] = nil
|
|
local SaveData = require("src.core.SaveData")
|
|
|
|
check(SaveData.isPortable() == true, "writable portable parent activates portable mode")
|
|
eq(SaveData.portableBaseDir(), base, "portable base is the probed folder")
|
|
|
|
SaveData._resetPortableCacheForTests()
|
|
env.FLATPAK_ID = "com.theboisclub.gen1recomp"
|
|
check(SaveData.isPortable() == false, "Flatpak ignores portable.txt")
|
|
eq(SaveData.portableBaseDir(), nil, "Flatpak has no portable base")
|
|
|
|
-- Read-only parent: create a dir we cannot write (best-effort).
|
|
SaveData._resetPortableCacheForTests()
|
|
env.FLATPAK_ID = nil
|
|
local ro = base .. "-ro"
|
|
os.execute('mkdir -p "' .. ro .. '" && touch "' .. ro .. '/portable.txt" && chmod 555 "' .. ro .. '"')
|
|
_G.love.filesystem.getSourceBaseDirectory = function() return ro end
|
|
_G.love.filesystem.getSource = function() return ro .. "/game" end
|
|
SaveData._resetPortableCacheForTests()
|
|
-- chmod 555 may still allow owner write on some FS; accept either outcome
|
|
-- but must not throw.
|
|
local ok, portable = pcall(function() return SaveData.isPortable() end)
|
|
check(ok, "RO portable probe must not throw")
|
|
if portable then
|
|
check(SaveData.portableBaseDir() ~= nil, "if still writable, portable stays on")
|
|
else
|
|
eq(SaveData.portableBaseDir(), nil, "unwritable portable parent falls back")
|
|
end
|
|
|
|
os.getenv = realGetenv
|
|
os.execute('chmod 755 "' .. ro .. '" 2>/dev/null; rm -rf "' .. base .. '" "' .. ro .. '"')
|
|
print("ok")
|