[CHG] *: move fw_policy from PR to batch

This commit is contained in:
Xavier Morel 2024-05-21 15:44:47 +02:00
parent 21b5dd439b
commit 9ddf017768
5 changed files with 23 additions and 14 deletions

View File

@ -38,8 +38,8 @@ from odoo.tools.misc import topological_sort, groupby, Reverse
from odoo.tools.sql import reverse_order
from odoo.tools.appdirs import user_cache_dir
from odoo.addons.base.models.res_partner import Partner
from odoo.addons.runbot_merge import git, utils
from odoo.addons.runbot_merge.models.pull_requests import RPLUS, Branch
from odoo.addons.runbot_merge import git
from odoo.addons.runbot_merge.models.pull_requests import Branch
from odoo.addons.runbot_merge.models.stagings_create import Message
@ -258,12 +258,6 @@ class PullRequests(models.Model):
token_field='fp_github_token',
format_args={'pr': parent, 'child': p},
)
# if we change the policy to skip CI, schedule followups on existing FPs
if vals.get('fw_policy') == 'skipci' and self.state == 'merged':
self.env['runbot_merge.pull_requests'].search([
('source_id', '=', self.id),
('state', 'not in', ('closed', 'merged')),
])._schedule_fp_followup()
return r
def _try_closing(self, by):
@ -396,7 +390,7 @@ class PullRequests(models.Model):
if not pr.parent_id:
_logger.info('-> no parent %s (%s)', pr.display_name, pr.parent_id)
continue
if not self.env.context.get('force_fw') and self.source_id.fw_policy != 'skipci' and pr.state not in ['validated', 'ready']:
if not self.env.context.get('force_fw') and self.source_id.batch_id.fw_policy != 'skipci' and pr.state not in ['validated', 'ready']:
_logger.info('-> wrong state %s (%s)', pr.display_name, pr.state)
continue
@ -424,7 +418,7 @@ class PullRequests(models.Model):
# check if batch-mate are all valid
mates = batch.prs
# wait until all of them are validated or ready
if not self.env.context.get('force_fw') and any(pr.source_id.fw_policy != 'skipci' and pr.state not in ('validated', 'ready') for pr in mates):
if not self.env.context.get('force_fw') and any(pr.source_id.batch_id.fw_policy != 'skipci' and pr.state not in ('validated', 'ready') for pr in mates):
_logger.info("-> not ready (%s)", [(pr.display_name, pr.state) for pr in mates])
continue
@ -989,6 +983,16 @@ class Batch(models.Model):
super().write(vals)
# if we change the policy to skip CI, schedule followups on existing FPs
# FIXME: although this should be managed by the command handler already,
# this should probably allow setting the fw policy on any batch
# of the sequence
if vals.get('fw_policy') == 'skipci' and self.merge_date:
self.env['runbot_merge.pull_requests'].search([
('source_id', '=', self.prs[:1].id),
('state', 'not in', ('closed', 'merged')),
])._schedule_fp_followup()
return True
# ordering is a bit unintuitive because the lowest sequence (and name)

View File

@ -655,7 +655,7 @@ def test_skip_ci_all(env, config, make_repo):
assert env['runbot_merge.pull_requests'].search([
('repository.name', '=', prod.name),
('number', '=', pr.number)
]).fw_policy == 'skipci'
]).batch_id.fw_policy == 'skipci'
with prod:
prod.post_status('staging.a', 'success', 'legal/cla')
@ -695,7 +695,7 @@ def test_skip_ci_next(env, config, make_repo):
'hansen fw=skipci',
config['role_reviewer']['token']
)
assert pr0_id.fw_policy == 'skipci'
assert pr0_id.batch_id.fw_policy == 'skipci'
env.run_crons()
_, _, pr2_id = env['runbot_merge.pull_requests'].search([], order='number')

View File

@ -20,6 +20,11 @@ class Batch(models.Model):
prs = fields.One2many('runbot_merge.pull_requests', 'batch_id')
fw_policy = fields.Selection([
('default', "Default"),
('skipci', "Skip CI"),
], required=True, default="default", string="Forward Port Policy")
merge_date = fields.Datetime(tracking=True)
skipchecks = fields.Boolean(
string="Skips Checks",

View File

@ -798,7 +798,7 @@ class PullRequests(models.Model):
feedback(close=True)
case commands.FW():
if source_reviewer or is_reviewer:
(self.source_id or self).fw_policy = command.name.lower()
(self.source_id or self).batch_id.fw_policy = command.name.lower()
match command:
case commands.FW.DEFAULT:
message = "Waiting for CI to create followup forward-ports."

View File

@ -159,7 +159,7 @@
<field name="squash"/>
<field name="draft"/>
<field string="Up To" name="limit_id"/>
<field string="Forward-Port Policy" name="fw_policy"/>
<!-- <field string="Forward-Port Policy" name="fw_policy"/>-->
</group>
</group>
<!-- influencers -->