From 565ea2bbe10267a1310c2efed6aaffecd59c6def Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Thu, 22 Nov 2012 20:59:20 +0000
Subject: modulemanager: Set module.reloading when a module is reloading, and
 when loading make the saved state available in module.saved_state (if any)

---
 core/modulemanager.lua | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/core/modulemanager.lua b/core/modulemanager.lua
index b0d54caa..4ba2c27e 100644
--- a/core/modulemanager.lua
+++ b/core/modulemanager.lua
@@ -111,7 +111,7 @@ local function do_unload_module(host, name)
 	return true;
 end
 
-local function do_load_module(host, module_name)
+local function do_load_module(host, module_name, state)
 	if not (host and module_name) then
 		return nil, "insufficient-parameters";
 	elseif not hosts[host] and host ~= "*"then
@@ -152,7 +152,8 @@ local function do_load_module(host, module_name)
 
 	local _log = logger.init(host..":"..module_name);
 	local api_instance = setmetatable({ name = module_name, host = host,
-		_log = _log, log = function (self, ...) return _log(...); end, event_handlers = new_multitable() }
+		_log = _log, log = function (self, ...) return _log(...); end, event_handlers = new_multitable(),
+		reloading = not not state, saved_state = state~=true and state or nil }
 		, { __index = api });
 
 	local pluginenv = setmetatable({ module = api_instance }, { __index = _G });
@@ -176,6 +177,7 @@ local function do_load_module(host, module_name)
 				log("warn", "Error loading module '%s' on '%s': %s", module_name, host, err or "nil");
 			end
 		end
+		api_instance.reloading, api_instance.saved_state = nil, nil;
 
 		if api_instance.host == "*" then
 			if not api_instance.global then -- COMPAT w/pre-0.9
@@ -225,8 +227,9 @@ local function do_reload_module(host, name)
 		end
 	end
 
+	mod.module.reloading = true;
 	do_unload_module(host, name);
-	local ok, err = do_load_module(host, name);
+	local ok, err = do_load_module(host, name, saved or true);
 	if ok then
 		mod = get_module(host, name);
 		if module_has_method(mod, "restore") then
-- 
cgit v1.2.3