Software / code / prosody
Comparison
core/moduleapi.lua @ 9556:e4c09e335bd9
moduleapi: Prevent loading disabled module as dependency of enabled one
Explicitly disabled module should stay disabled.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 25 Oct 2018 17:11:10 +0200 |
| parent | 9509:b57353f76c83 |
| child | 9686:e52e4e6e7ffb |
comparison
equal
deleted
inserted
replaced
| 9555:ed5a5ddcef17 | 9556:e4c09e335bd9 |
|---|---|
| 127 return f(); | 127 return f(); |
| 128 end | 128 end |
| 129 | 129 |
| 130 function api:depends(name) | 130 function api:depends(name) |
| 131 local modulemanager = require"core.modulemanager"; | 131 local modulemanager = require"core.modulemanager"; |
| 132 if self:get_option_inherited_set("modules_disabled", {}):contains(name) then | |
| 133 error("Dependency on disabled module mod_"..name); | |
| 134 end | |
| 132 if not self.dependencies then | 135 if not self.dependencies then |
| 133 self.dependencies = {}; | 136 self.dependencies = {}; |
| 134 self:hook("module-reloaded", function (event) | 137 self:hook("module-reloaded", function (event) |
| 135 if self.dependencies[event.module] and not self.reloading then | 138 if self.dependencies[event.module] and not self.reloading then |
| 136 self:log("info", "Auto-reloading due to reload of %s:%s", event.host, event.module); | 139 self:log("info", "Auto-reloading due to reload of %s:%s", event.host, event.module); |
| 143 self:log("info", "Auto-unloading due to unload of %s:%s", event.host, event.module); | 146 self:log("info", "Auto-unloading due to unload of %s:%s", event.host, event.module); |
| 144 modulemanager.unload(self.host, self.name); | 147 modulemanager.unload(self.host, self.name); |
| 145 end | 148 end |
| 146 end); | 149 end); |
| 147 end | 150 end |
| 148 if self:get_option_inherited_set("modules_disabled", {}):contains(name) then | |
| 149 self:log("warn", "Loading prerequisite mod_%s despite it being disabled", name); | |
| 150 end | |
| 151 local mod = modulemanager.get_module(self.host, name) or modulemanager.get_module("*", name); | 151 local mod = modulemanager.get_module(self.host, name) or modulemanager.get_module("*", name); |
| 152 if mod and mod.module.host == "*" and self.host ~= "*" | 152 if mod and mod.module.host == "*" and self.host ~= "*" |
| 153 and modulemanager.module_has_method(mod, "add_host") then | 153 and modulemanager.module_has_method(mod, "add_host") then |
| 154 mod = nil; -- Target is a shared module, so we still want to load it on our host | 154 mod = nil; -- Target is a shared module, so we still want to load it on our host |
| 155 end | 155 end |