[REV] base: revert 2486259ef9

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) <mat@odoo.com>
This commit is contained in:
Martin Trigaux
2019-08-27 14:55:37 +00:00
parent 7c21999537
commit ca9ea81932
+7 -10
View File
@@ -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):