summaryrefslogtreecommitdiff
path: root/odoo/modules/loading.py
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/modules/loading.py')
-rw-r--r--odoo/modules/loading.py17
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: