diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 16916fc8561..70056383090 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -169,7 +169,9 @@ class ir_model(osv.osv): if not context.get(MODULE_UNINSTALL_FLAG): # only reload pool for normal unlink. For module uninstall the # reload is done independently in openerp.modules.loading + cr.commit() # must be committed before reloading registry in new cursor pooler.restart_pool(cr.dbname) + openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res @@ -307,7 +309,6 @@ class ir_model_fields(osv.osv): if column_name and (result and result[0] == 'r'): cr.execute('ALTER table "%s" DROP column "%s" cascade' % (model._table, field.name)) model._columns.pop(field.name, None) - openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return True def unlink(self, cr, user, ids, context=None): @@ -321,6 +322,9 @@ class ir_model_fields(osv.osv): self._drop_column(cr, user, ids, context) res = super(ir_model_fields, self).unlink(cr, user, ids, context) + if not context.get(MODULE_UNINSTALL_FLAG): + cr.commit() + openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res def create(self, cr, user, vals, context=None): @@ -469,7 +473,7 @@ class ir_model_fields(osv.osv): for col_name, col_prop, val in patch_struct[1]: setattr(obj._columns[col_name], col_prop, val) obj._auto_init(cr, ctx) - openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) + openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res class ir_model_constraint(Model): diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index a0d1eedef2b..5dcb1693c67 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -411,7 +411,6 @@ class module(osv.osv): if to_install_ids: self.button_install(cr, uid, to_install_ids, context=context) - openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return dict(ACTION_DICT, name=_('Install')) def button_immediate_install(self, cr, uid, ids, context=None): @@ -500,7 +499,6 @@ class module(osv.osv): raise orm.except_orm(_('Error'), _("The `base` module cannot be uninstalled")) dep_ids = self.downstream_dependencies(cr, uid, ids, context=context) self.write(cr, uid, ids + dep_ids, {'state': 'to remove'}) - openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return dict(ACTION_DICT, name=_('Uninstall')) def button_uninstall_cancel(self, cr, uid, ids, context=None): diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py index a2368a9f508..0508030242c 100644 --- a/openerp/addons/base/res/res_config.py +++ b/openerp/addons/base/res/res_config.py @@ -360,7 +360,6 @@ class res_config_installer(osv.osv_memory): modules.search(cr, uid, [('name','in',to_install)]), 'to install', ['uninstalled'], context=context) cr.commit() - openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) new_db, self.pool = pooler.restart_pool(cr.dbname, update_module=True) res_config_installer() diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index a7696c5fe18..e3c69e25b73 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -34,6 +34,7 @@ import openerp import openerp.modules.db import openerp.modules.graph import openerp.modules.migration +import openerp.modules.registry import openerp.osv as osv import openerp.pooler as pooler import openerp.tools as tools diff --git a/openerp/modules/registry.py b/openerp/modules/registry.py index b06c500a24c..7ca155b012f 100644 --- a/openerp/modules/registry.py +++ b/openerp/modules/registry.py @@ -232,6 +232,9 @@ class RegistryManager(object): registry.ready = True + if update_module: + # only in case of update, otherwise we'll have an infinite reload loop! + cls.signal_registry_change(db_name) return registry @classmethod