From 57827e5c6fee43fbc64382b2f799b1ae97a8c421 Mon Sep 17 00:00:00 2001 From: Xavier-Do Date: Fri, 9 Feb 2024 10:13:56 +0100 Subject: [PATCH] [IMP] runbot: add has_pr filter --- runbot/controllers/frontend.py | 10 ++++++++-- runbot/models/bundle.py | 7 +++++++ runbot/templates/frontend.xml | 8 +++++++- runbot/views/bundle_views.xml | 17 +++++++++++++++++ 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/runbot/controllers/frontend.py b/runbot/controllers/frontend.py index 516f8f7d..d846e1c4 100644 --- a/runbot/controllers/frontend.py +++ b/runbot/controllers/frontend.py @@ -42,6 +42,7 @@ def route(routes, **kw): search = cookie_search else: search = kwargs.get('search', '') + has_pr = kwargs.get('has_pr', None) if keep_search and cookie_search != search: response.set_cookie('search', search) @@ -56,7 +57,7 @@ def route(routes, **kw): response.qcontext['filter_mode'] = filter_mode response.qcontext['default_category'] = request.env['ir.model.data']._xmlid_to_res_id('runbot.default_category') - response.qcontext['qu'] = QueryURL('/runbot/%s' % (slug(project) if project else ''), path_args=['search'], search=search, refresh=refresh) + response.qcontext['qu'] = QueryURL('/runbot/%s' % (slug(project) if project else ''), search=search, refresh=refresh, has_pr=has_pr) if 'title' not in response.qcontext: response.qcontext['title'] = 'Runbot %s' % project.name or '' response.qcontext['nb_build_errors'] = nb_build_errors @@ -107,7 +108,7 @@ class Runbot(Controller): '/runbot', '/runbot/', '/runbot//search/'], website=True, auth='public', type='http') - def bundles(self, project=None, search='', projects=False, refresh=False, for_next_freeze=False, limit=40, **kwargs): + def bundles(self, project=None, search='', projects=False, refresh=False, for_next_freeze=False, limit=40, has_pr=None, **kwargs): search = search if len(search) < 60 else search[:60] env = request.env categories = env['runbot.category'].search([]) @@ -128,6 +129,9 @@ class Runbot(Controller): if project: domain = [('last_batch', '!=', False), ('project_id', '=', project.id), ('no_build', '=', False)] + if has_pr is not None: + domain.append(('has_pr', '=', bool(has_pr))) + filter_mode = request.httprequest.cookies.get('filter_mode', False) if filter_mode == 'sticky': domain.append(('sticky', '=', True)) @@ -176,6 +180,8 @@ class Runbot(Controller): 'project': project, 'triggers': triggers, 'trigger_display': trigger_display, + 'has_pr': has_pr, + 'search': search, }) context.update({'message': request.env['ir.config_parameter'].sudo().get_param('runbot.runbot_message')}) diff --git a/runbot/models/bundle.py b/runbot/models/bundle.py index 9ea1b4cc..8f6282f7 100644 --- a/runbot/models/bundle.py +++ b/runbot/models/bundle.py @@ -35,6 +35,8 @@ class Bundle(models.Model): base_id = fields.Many2one('runbot.bundle', 'Base bundle', compute='_compute_base_id', store=True) to_upgrade = fields.Boolean('To upgrade', compute='_compute_to_upgrade', store=True, index=False) + has_pr = fields.Boolean('Has PR', compute='_compute_has_pr', store=True) + version_id = fields.Many2one('runbot.version', 'Version', compute='_compute_version_id', store=True, recursive=True) version_number = fields.Char(related='version_id.number', store=True, index=True) @@ -110,6 +112,11 @@ class Bundle(models.Model): else: bundle.base_id = master_base or fallback + @api.depends('branch_ids.is_pr', 'branch_ids.alive') + def _compute_has_pr(self): + for bundle in self: + bundle.has_pr = any(branch.is_pr and branch.alive for branch in bundle.branch_ids) + @tools.ormcache('project_id') def _get_base_ids(self, project_id): return [(b.id, b.name) for b in self.search([('is_base', '=', True), ('project_id', '=', project_id)])] diff --git a/runbot/templates/frontend.xml b/runbot/templates/frontend.xml index 0210a657..441627ad 100644 --- a/runbot/templates/frontend.xml +++ b/runbot/templates/frontend.xml @@ -8,7 +8,13 @@
-
diff --git a/runbot/views/bundle_views.xml b/runbot/views/bundle_views.xml index 3335b808..3e37e75c 100644 --- a/runbot/views/bundle_views.xml +++ b/runbot/views/bundle_views.xml @@ -53,6 +53,7 @@ + @@ -154,6 +155,22 @@ + + runbot.bundle.filter + runbot.bundle + + + + + + + + + + + + + runbot.batch