Fix module loading when some not found.

If some modules exist in db and not in addons/ , then, the new code
introduced at db57878bbb11 would loop forever. Check that and continue
in such a case.

bzr revid: p_christ@hol.gr-20090131113036-ikvuyry7kt3x4ao7
This commit is contained in:
P. Christeas
2009-01-31 13:30:36 +02:00
parent cae799cc84
commit 03c835af30
2 changed files with 22 additions and 9 deletions
+21 -8
View File
@@ -300,8 +300,11 @@ def upgrade_graph(graph, module_list, force=None):
if info.get('installable', True):
packages.append((module, info.get('depends', []), info))
if not packages:
return False
dependencies = dict([(p, deps) for p, deps, data in packages])
current, later = set([p for p, dep, data in packages]), set()
while packages and current > later:
package, deps, data = packages[0]
@@ -561,6 +564,8 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, **kwargs):
has_updates = False
modobj = None
logger.notifyChannel('init', netsvc.LOG_DEBUG, 'loading %d packages..' % len(graph))
for package in graph:
status['progress'] = (float(statusi)+0.1) / len(graph)
m = package.name
@@ -682,16 +687,24 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
STATES_TO_LOAD += ['to install']
loop_count=1
while True:
cr.execute("SELECT name from ir_module_module WHERE state in (%s)" % ','.join(['%s']*len(STATES_TO_LOAD)), STATES_TO_LOAD)
module_list = [name for (name,) in cr.fetchall() if name not in graph]
if not module_list:
break
upgrade_graph(graph, module_list, force)
logger.notifyChannel('init', netsvc.LOG_DEBUG, 'Updating graph with %d more modules' % (len(module_list)))
if not upgrade_graph(graph, module_list, force):
break
r = load_module_graph(cr, graph, status, report=report)
has_updates = has_updates or r
logger.notifyChannel('init', netsvc.LOG_DEBUG, 'Has updates %s' % (str(has_updates)))
loop_count +=1
if (loop_count >100):
raise ProgrammingError()
if has_updates:
cr.execute("""select model,name from ir_model where id not in (select model_id from ir_model_access)""")
@@ -703,7 +716,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
obj = pool.get(model)
if obj:
obj._check_removed_columns(cr, log=True)
if report.get_report():
logger.notifyChannel('init', netsvc.LOG_INFO, report)
@@ -717,11 +730,11 @@ def load_modules(db, force_demo=False, status=None, update_module=False):
cr.execute('select model,res_id from ir_model_data where noupdate=%s and module=%s order by id desc', (False, mod_name,))
for rmod, rid in cr.fetchall():
uid = 1
rmod_module= pool.get(rmod)
if rmod_module:
rmod_module.unlink(cr, uid, [rid])
else:
logger.notifyChannel('init', netsvc.LOG_ERROR, 'Could not locate %s to remove res=%d' % (rmod,rid))
rmod_module= pool.get(rmod)
if rmod_module:
rmod_module.unlink(cr, uid, [rid])
else:
logger.notifyChannel('init', netsvc.LOG_ERROR, 'Could not locate %s to remove res=%d' % (rmod,rid))
cr.execute('delete from ir_model_data where noupdate=%s and module=%s', (False, mod_name,))
cr.commit()
#
+1 -1
View File
@@ -118,7 +118,7 @@ class report_xml(osv.osv):
('html', 'html'),
('raw', 'raw'),
('sxw', 'sxw'),
('txt', 'txt'),
('txt', 'txt'),
('odt', 'odt'),
], string='Type', required=True),
'groups_id': fields.many2many('res.groups', 'res_groups_report_rel', 'uid', 'gid', 'Groups'),