diff options
Diffstat (limited to 'odoo/modules/loading.py')
| -rw-r--r-- | odoo/modules/loading.py | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/odoo/modules/loading.py b/odoo/modules/loading.py index 5fb56887948..6b924f09bf4 100644 --- a/odoo/modules/loading.py +++ b/odoo/modules/loading.py @@ -379,7 +379,22 @@ def load_modules(db, force_demo=False, status=None, update_module=False): _check_module_names(cr, itertools.chain(tools.config['init'], tools.config['update'])) - module_names = [k for k, v in tools.config['init'].items() if v] + # auto-install module second pass: recursive bit in db.py handles + # auto_install modules with no dependencies or where all + # dependencies are auto_install, couldn't get it to work with + # non-required auto_install deps so here + cr.execute(""" + SELECT m.name FROM ir_module_module m + WHERE m.auto_install + AND m.state != 'installed' + AND NOT EXISTS ( + SELECT 1 FROM ir_module_module_dependency d + JOIN ir_module_module mdep ON (d.name = mdep.name) + WHERE d.module_id = m.id + AND d.auto_install_required + AND mdep.state NOT IN ('installed', 'to install') + )""") + module_names = [k for k, v in tools.config['init'].items() if v] + [x[0] for x in cr.fetchall()] if module_names: modules = Module.search([('state', '=', 'uninstalled'), ('name', 'in', module_names)]) if modules: |
