From 1f30af4345af31403ca12fe9f1f591fe5bbb70ab Mon Sep 17 00:00:00 2001 From: Xavier Morel <xmo@odoo.com> Date: Mon, 4 Mar 2019 12:11:34 +0100 Subject: [PATCH] [IMP] runbot_merge: dashboard clarity * split out truly awaiting PRs from those waiting on an event of some sort * if a staging is active but doesn't have a state yet, it should be considered pending not cancelled closes #74 --- runbot_merge/models/pull_requests.py | 18 ++++++++++++++++++ runbot_merge/views/templates.xml | 13 +++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/runbot_merge/models/pull_requests.py b/runbot_merge/models/pull_requests.py index b3762710..62c01aa5 100644 --- a/runbot_merge/models/pull_requests.py +++ b/runbot_merge/models/pull_requests.py @@ -440,6 +440,24 @@ class PullRequests(models.Model): " PR is linked to an other non-ready PR" ) + @property + def blocked(self): + if self.state not in ('ready', 'merged', 'closed'): + return True + if not (self.squash or self.merge_method): + return True + + # can't be blocked on a co-dependent PR if it's a patch-* + if re.search(r':patch-\d+$', self.label): + return False + + return bool(self.search_count([ + ('id', '!=', self.id), + ('label', '=', self.label), + ('state', '!=', 'ready'), + ('priority', '!=', 0), + ])) + @api.depends('head') def _compute_statuses(self): Commits = self.env['runbot_merge.commit'] diff --git a/runbot_merge/views/templates.xml b/runbot_merge/views/templates.xml index fa60fef4..4a085ce6 100644 --- a/runbot_merge/views/templates.xml +++ b/runbot_merge/views/templates.xml @@ -53,7 +53,16 @@ <t t-if="ready_unstaged"> <h5 style="display: inline-block;">Awaiting</h5> <ul class="list-inline" style="display: inline-block;"> - <li t-foreach="ready_unstaged" t-as="pr"> + <li t-foreach="ready_unstaged" t-as="pr" t-if="not pr.blocked"> + <a t-attf-href="https://github.com/{{ pr.repository.name }}/pull/{{ pr.number }}" + t-att-title="pr.message.split('\n')[0]"> + <t t-esc="pr.repository.name"/>#<t t-esc="pr.number"/> + </a> + </li> + </ul> + <h5 style="display: inline-block;">Blocked</h5> + <ul class="list-inline" style="display: inline-block;"> + <li t-foreach="ready_unstaged" t-as="pr" t-if="pr.blocked"> <a t-attf-href="https://github.com/{{ pr.repository.name }}/pull/{{ pr.number }}" t-att-title="pr.message.split('\n')[0]"> <t t-esc="pr.repository.name"/>#<t t-esc="pr.number"/> @@ -71,7 +80,7 @@ <t t-foreach="branch.staging_ids.sorted(lambda s: s.staged_at, reverse=True)[:6]" t-as="staging"> <t t-set="success" t-value="staging.state == 'success'"/> <t t-set="failure" t-value="staging.state == 'failure'"/> - <t t-set="pending" t-value="staging.state == 'pending' and staging.active"/> + <t t-set="pending" t-value="staging.active and (not staging.state or staging.state == 'pending')"/> <t t-set="stateclass"> <t t-if="success">bg-success</t> <t t-if="failure">bg-danger</t>