[FIX] runbot: fix duplicate id and improve global_state

This commit is contained in:
Xavier-Do 2020-01-16 13:41:29 +01:00
parent c58d1626ea
commit d75c4f085f
3 changed files with 42 additions and 4 deletions

View File

@ -14,7 +14,7 @@ class JsonDictField(Field):
def convert_to_column(self, value, record, values=None, validate=True):
val = self.convert_to_cache(value, record, validate=validate)
return Json(value) if val else val
return Json(val) if val else False
def convert_to_cache(self, value, record, validate=True):
return value.dict if isinstance(value, FieldDict) else value if isinstance(value, dict) else None

View File

@ -126,10 +126,14 @@ class runbot_build(models.Model):
for record in self:
if record.duplicate_id:
record.global_state = record.duplicate_id.global_state
elif record.global_state == 'done' and self.local_state == 'done':
# avoid to recompute if done, mostly important whith many orphan childrens
record.global_state = 'done'
else:
waiting_score = record._get_state_score('waiting')
if record._get_state_score(record.local_state) > waiting_score and record.children_ids: # if finish, check children
children_state = record._get_youngest_state([child.global_state for child in record.children_ids])
children_ids = [child for child in record.children_ids if not child.orphan_result]
if record._get_state_score(record.local_state) > waiting_score and children_ids: # if finish, check children
children_state = record._get_youngest_state([child.global_state for child in children_ids])
if record._get_state_score(children_state) > waiting_score:
record.global_state = record.local_state
else:
@ -248,7 +252,7 @@ class runbot_build(models.Model):
'|', ('local_result', '=', False), ('local_result', '!=', 'skipped'), # had to reintroduce False posibility for selections
('config_id', '=', build_id.config_id.id),
('extra_params', '=', build_id.extra_params),
('config_data', '=', build_id.config_data),
('config_data', '=', build_id.config_data or False),
]
candidates = self.search(domain)
if candidates and nb_deps:

View File

@ -89,6 +89,40 @@ class Test_Build(RunbotCase):
build.env.cr.execute("SELECT config_data, config_data->'test_write' AS written, config_data->'test_build' AS test_build FROM runbot_build WHERE id = %s", [build.id])
self.assertEqual([({'test_write': 'written', 'test_build': 'foo'}, 'written', 'foo')], self.env.cr.fetchall())
def test_config_data_duplicate(self):
build = self.create_build({
'branch_id': self.branch.id,
'name': 'd0d0caca0000ffffffffffffffffffffffffffff',
})
build2 = self.create_build({
'branch_id': self.branch.id,
'name': 'd0d0caca0000ffffffffffffffffffffffffffff',
})
self.assertEqual(build2.duplicate_id, build)
build3 = self.create_build({
'branch_id': self.branch.id,
'name': 'd0d0caca0000ffffffffffffffffffffffffffff',
'config_data': {'test':'aa'},
})
self.assertFalse(build3.duplicate_id)
build4 = self.create_build({
'branch_id': self.branch.id,
'name': 'd0d0caca0000ffffffffffffffffffffffffffff',
'config_data': {'test':'aa'},
})
self.assertEqual(build4.duplicate_id, build3)
build5 = self.create_build({
'branch_id': self.branch.id,
'name': 'd0d0caca0000ffffffffffffffffffffffffffff',
'config_data': {'test':'bb'},
})
self.assertFalse(build5.duplicate_id)
@patch('odoo.addons.runbot.models.build.runbot_build._get_repo_available_modules')
def test_filter_modules(self, mock_get_repo_mods):
""" test module filtering """