[ADD] runbot_merge: stagings canceling wizard

- allows providing a canceling reason
- allows nuking the splits at the same time (hopefully)

Fixes #661
This commit is contained in:
Xavier Morel 2022-12-07 14:45:48 +01:00
parent 2746a13163
commit 03c9a7e492
6 changed files with 58 additions and 2 deletions

View File

@ -14,6 +14,7 @@
'views/configuration.xml',
'views/templates.xml',
'models/project_freeze/views.xml',
'models/staging_cancel/views.xml',
],
'assets': {
'web.assets_frontend': [

View File

@ -2,3 +2,4 @@ from . import res_partner
from . import project
from . import pull_requests
from . import project_freeze
from . import staging_cancel

View File

@ -1831,8 +1831,17 @@ class Stagings(models.Model):
s.write(vals)
def action_cancel(self):
self.cancel("explicitly cancelled by %s", self.env.user.display_name)
return { 'type': 'ir.actions.act_window_close' }
w = self.env['runbot_merge.stagings.cancel'].create({
'staging_id': self.id,
})
return {
'type': 'ir.actions.act_window',
'target': 'new',
'name': f'Cancel staging {self.id} ({self.target.name})',
'view_mode': 'form',
'res_model': w._name,
'res_id': w.id,
}
def cancel(self, reason, *args):
self = self.filtered('active')

View File

@ -0,0 +1,27 @@
import logging
from odoo import models, fields
_logger = logging.getLogger(__name__)
class CancelWizard(models.TransientModel):
_name = 'runbot_merge.stagings.cancel'
_description = "Wizard for cancelling a staging"
staging_id = fields.Many2one('runbot_merge.stagings', required=True)
reason = fields.Char()
cancel_splits = fields.Boolean(help="\
If any split is pending, also cancel them and move the corresponding \
pull requests back into the general pool.")
def action_cancel(self):
if self.cancel_splits:
self.env['runbot_merge.split'].search([
('target', '=', self.staging_id.target.id)
]).unlink()
reason = self.reason.replace('%', '%%').strip() if self.reason else ''
if reason:
reason = f' because {reason}'
self.staging_id.cancel(f'Cancelled by {self.env.user.display_name}{reason}')
self.unlink()
return { 'type': 'ir.actions.act_window_close' }

View File

@ -0,0 +1,17 @@
<odoo>
<record id="runbot_merge_stagings_cancel_form" model="ir.ui.view">
<field name="name">Staging Cancel Form</field>
<field name="model">runbot_merge.stagings.cancel</field>
<field name="arch" type="xml">
<form>
<group>
<group colspan="4"><field name="reason"/></group>
<group colspan="4"><field name="cancel_splits"/></group>
</group>
<footer>
<button string="Confirm" name="action_cancel" type="object" class="btn btn-primary"/>
</footer>
</form>
</field>
</record>
</odoo>

View File

@ -10,6 +10,7 @@ access_runbot_merge_pull_requests_admin,Admin access to PR,model_runbot_merge_pu
access_runbot_merge_pull_requests_tagging_admin,Admin access to tagging,model_runbot_merge_pull_requests_tagging,runbot_merge.group_admin,1,1,1,1
access_runbot_merge_commit_admin,Admin access to commits,model_runbot_merge_commit,runbot_merge.group_admin,1,1,1,1
access_runbot_merge_stagings_admin,Admin access to stagings,model_runbot_merge_stagings,runbot_merge.group_admin,1,1,1,1
access_runbot_merge_stagings_cancel_admin,Admin access to cancelling stagings,model_runbot_merge_stagings_cancel,runbot_merge.group_admin,1,1,1,1
access_runbot_merge_split_admin,Admin access to splits,model_runbot_merge_split,runbot_merge.group_admin,1,1,1,1
access_runbot_merge_batch_admin,Admin access to batches,model_runbot_merge_batch,runbot_merge.group_admin,1,1,1,1
access_runbot_merge_fetch_job_admin,Admin access to fetch jobs,model_runbot_merge_fetch_job,runbot_merge.group_admin,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
10 access_runbot_merge_pull_requests_tagging_admin Admin access to tagging model_runbot_merge_pull_requests_tagging runbot_merge.group_admin 1 1 1 1
11 access_runbot_merge_commit_admin Admin access to commits model_runbot_merge_commit runbot_merge.group_admin 1 1 1 1
12 access_runbot_merge_stagings_admin Admin access to stagings model_runbot_merge_stagings runbot_merge.group_admin 1 1 1 1
13 access_runbot_merge_stagings_cancel_admin Admin access to cancelling stagings model_runbot_merge_stagings_cancel runbot_merge.group_admin 1 1 1 1
14 access_runbot_merge_split_admin Admin access to splits model_runbot_merge_split runbot_merge.group_admin 1 1 1 1
15 access_runbot_merge_batch_admin Admin access to batches model_runbot_merge_batch runbot_merge.group_admin 1 1 1 1
16 access_runbot_merge_fetch_job_admin Admin access to fetch jobs model_runbot_merge_fetch_job runbot_merge.group_admin 1 1 1 1