From 337598e0d636f8f6f6a5af1ce352fb90e41db8e7 Mon Sep 17 00:00:00 2001 From: lethosor Date: Tue, 10 Feb 2015 16:36:08 -0500 Subject: [PATCH 1/2] Restore lua environment persistence and update modified timestamp correctly See #544 --- library/lua/dfhack.lua | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/library/lua/dfhack.lua b/library/lua/dfhack.lua index 030833d64..24d94e187 100644 --- a/library/lua/dfhack.lua +++ b/library/lua/dfhack.lua @@ -444,21 +444,18 @@ function dfhack.run_script_with_env(envVars,name,...) local perr local time = dfhack.filesystem.mtime(file) if time == scriptMtime[file] then - f = scripts[file].runScript + f = scripts[file].__runScript__ else - env = {} - setmetatable(env, { __index = base_env }) - for x,y in pairs(envVars or {}) do - env[x] = y - end --reload - f,perr = loadfile(file, 't', env) + f, perr = loadfile(file, 't', env) if not f then - error(perr) + error(perr) end + -- avoid updating mtime if the script failed to load + scriptMtime[file] = time end scripts[file] = env - env.runScript = f + env.__runScript__ = f return f(...), env end From 37f391ea6de49945fdac2999aaa5f85e7d2adf2c Mon Sep 17 00:00:00 2001 From: lethosor Date: Tue, 10 Feb 2015 17:22:16 -0500 Subject: [PATCH 2/2] Don't store runScript() in script environments --- library/lua/dfhack.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/library/lua/dfhack.lua b/library/lua/dfhack.lua index 24d94e187..1cc9c5552 100644 --- a/library/lua/dfhack.lua +++ b/library/lua/dfhack.lua @@ -383,10 +383,12 @@ local internal = dfhack.internal internal.scripts = internal.scripts or {} internal.scriptPath = internal.scriptPath or {} internal.scriptMtime = internal.scriptMtime or {} +internal.scriptRun = internal.scriptRun or {} local scripts = internal.scripts local scriptPath = internal.scriptPath local scriptMtime = internal.scriptMtime +local scriptRun = internal.scriptRun local hack_path = dfhack.getHackPath() @@ -443,8 +445,8 @@ function dfhack.run_script_with_env(envVars,name,...) local f local perr local time = dfhack.filesystem.mtime(file) - if time == scriptMtime[file] then - f = scripts[file].__runScript__ + if time == scriptMtime[file] and scriptRun[file] then + f = scriptRun[file] else --reload f, perr = loadfile(file, 't', env) @@ -455,7 +457,7 @@ function dfhack.run_script_with_env(envVars,name,...) scriptMtime[file] = time end scripts[file] = env - env.__runScript__ = f + scriptRun[file] = f return f(...), env end