Skip to content

Commit a00977c

Browse files
Xavier-Dod-fence
authored andcommitted
[IMP] runbot: improve build error search
In some case we would like to have the error only breaking in some versions or triggers. This commit add two compued fields with search methods to add This capability. searching [('only_trigger_ids', 'in', [trigger_id])] will return errors only breaging in trigger_id searching [('only_trigger_ids', 'any', [('display_name', 'like', 'Single')])] will return errors only breaging in Single like triger (not in multi) [('only_trigger_ids', 'any', [('display_name', 'like', 'Fake')])] will return errors only breaging in Faketime triger The same apples to versions but this is not working because of the search methods traversing errors, contents and builds. We need to store the version_ids but the migration takes 14 minutes, will be done in another pr.
1 parent 58cda7b commit a00977c

3 files changed

Lines changed: 34 additions & 2 deletions

File tree

runbot/models/build_error.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,9 @@ class BuildError(models.Model):
269269

270270
disappearing_batch_ids = fields.Many2many('runbot.batch', compute='_compute_disappearing_batch_ids', string='Fixing batches')
271271

272+
only_trigger_ids = fields.Many2one('runbot.trigger', string='Only Triggers', compute='_compute_only_trigger_ids', search='_search_only_trigger_ids')
273+
only_version_ids = fields.Many2one('runbot.version', string='Only Versions', compute='_compute_only_version_ids', search='_search_only_version_ids')
274+
272275
@api.constrains('tags_min_version_id', 'tags_max_version_id')
273276
def _check_min_max_version(self):
274277
for build_error in self:
@@ -337,6 +340,30 @@ def _compute_disappearing_batch_ids(self):
337340
disappearing_batches_ids.append(disappearing_batch.id)
338341
record.disappearing_batch_ids = self.env['runbot.batch'].browse(disappearing_batches_ids)
339342

343+
def _compute_only_trigger_ids(self):
344+
for record in self:
345+
record.only_trigger_ids = record.trigger_ids[0] if record.trigger_ids else False
346+
347+
def _search_only_trigger_ids(self, operator, value):
348+
if operator == 'any':
349+
operator = 'in'
350+
value = self.env['runbot.trigger'].search(value).ids
351+
if operator == 'in':
352+
return ["!", ("trigger_ids", "any", [("id", "not in", value)])]
353+
raise UserError("Operator %s is not supported for only_trigger_ids search" % operator)
354+
355+
def _compute_only_version_ids(self):
356+
for record in self:
357+
record.only_version_ids = record.version_ids[0] if record.version_ids else False
358+
359+
def _search_only_version_ids(self, operator, value):
360+
if operator == 'any':
361+
operator = 'in'
362+
value = self.env['runbot.version'].search(value).ids
363+
if operator == 'in':
364+
return ["!", ("version_ids", "any", [("id", "not in", value)])]
365+
raise UserError("Operator %s is not supported for only_version_ids search" % operator)
366+
340367
def action_appearing_batches(self):
341368
self.ensure_one()
342369
if not self.first_seen_batch_ids:
@@ -931,7 +958,7 @@ def _compute_version_ids(self):
931958
res = dict(self.env.cr.fetchall())
932959

933960
for build_error_content in self:
934-
build_error_content.version_ids = self.env['runbot.version'].browse(res.get(build_error_content.id, []))
961+
build_error_content.version_ids = self.env['runbot.version'].browse([v for v in res.get(build_error_content.id, []) if v])
935962

936963
@api.depends('build_ids')
937964
def _compute_trigger_ids(self):

runbot/views/build_error_views.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,10 +305,14 @@
305305
<field name="arch" type="xml">
306306
<search string="Search errors">
307307
<field name="content"/>
308+
<field name="name"/>
308309
<field name="canonical_tags"/>
309-
<field name="version_ids"/>
310310
<field name="responsible"/>
311311
<field name="team_id"/>
312+
<!--field name="only_version_ids"/--><!--to uncomment once version_ids is stored-->
313+
<field name="version_ids"/>
314+
<field name="only_trigger_ids"/>
315+
<field name="trigger_ids"/>
312316
<filter string="Assigned to me" name="my_errors" domain="[('responsible', '=', uid)]"/>
313317
<separator/>
314318
<filter string="Customer is me" name="my_errors_customer" domain="[('customer', '=', uid)]"/>

runbot/views/host_views.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<field name="nb_run_slot"/>
2626
<field name="last_exception" readonly='1'/>
2727
<field name="exception_count" readonly='1'/>
28+
<field name="profile"/>
2829
</group>
2930
<notebook>
3031
<page string="Messages">

0 commit comments

Comments
 (0)