From ca9ea81932b24e5c8f1c032fbcfa949f60f0eb02 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Tue, 27 Aug 2019 14:43:44 +0000 Subject: [PATCH] [REV] base: revert 2486259ef99ec85cf The commit was for performance reasons but introduced regressions as explained at https://github.com/odoo/odoo/pull/29779#issuecomment-524346268 Reverting until finding a better patch closes odoo/odoo#36143 Signed-off-by: Martin Trigaux (mat) --- odoo/addons/base/models/ir_module.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/odoo/addons/base/models/ir_module.py b/odoo/addons/base/models/ir_module.py index 4ac31630dc7..330bd41ffea 100644 --- a/odoo/addons/base/models/ir_module.py +++ b/odoo/addons/base/models/ir_module.py @@ -356,38 +356,35 @@ class Module(models.Model): msg = _('Unable to process module "%s" because an external dependency is not met: %s') raise UserError(msg % (module_name, e.args[0])) - def _state_update(self, newstate, states_to_update, level=100, checked=False): + def _state_update(self, newstate, states_to_update, level=100): if level < 1: raise UserError(_('Recursion error in modules dependencies !')) # whether some modules are installed with demo data demo = False - if not checked: - checked = self.browse() - for module in (self - checked): + + for module in self: # determine dependency modules to update/others update_mods, ready_mods = self.browse(), self.browse() for dep in module.dependencies_id: if dep.state == 'unknown': raise UserError(_("You try to install module '%s' that depends on module '%s'.\nBut the latter module is not available in your system.") % (module.name, dep.name,)) if dep.depend_id.state == newstate: - ready_mods |= dep.depend_id + ready_mods += dep.depend_id else: - update_mods |= dep.depend_id + update_mods += dep.depend_id # update dependency modules that require it, and determine demo for module - update_demo, now_checked = update_mods._state_update( - newstate, states_to_update, level=level-1, checked=checked) + update_demo = update_mods._state_update(newstate, states_to_update, level=level-1) module_demo = module.demo or update_demo or any(mod.demo for mod in ready_mods) demo = demo or module_demo - checked |= now_checked # check dependencies and update module itself self.check_external_dependencies(module.name, newstate) if module.state in states_to_update: module.write({'state': newstate, 'demo': module_demo}) - return demo, checked | self + return demo @assert_log_admin_access def button_install(self):