mirror of
https://github.com/odoo/runbot.git
synced 2025-03-27 13:25:47 +07:00
[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:
parent
2746a13163
commit
03c9a7e492
@ -14,6 +14,7 @@
|
|||||||
'views/configuration.xml',
|
'views/configuration.xml',
|
||||||
'views/templates.xml',
|
'views/templates.xml',
|
||||||
'models/project_freeze/views.xml',
|
'models/project_freeze/views.xml',
|
||||||
|
'models/staging_cancel/views.xml',
|
||||||
],
|
],
|
||||||
'assets': {
|
'assets': {
|
||||||
'web.assets_frontend': [
|
'web.assets_frontend': [
|
||||||
|
@ -2,3 +2,4 @@ from . import res_partner
|
|||||||
from . import project
|
from . import project
|
||||||
from . import pull_requests
|
from . import pull_requests
|
||||||
from . import project_freeze
|
from . import project_freeze
|
||||||
|
from . import staging_cancel
|
||||||
|
@ -1831,8 +1831,17 @@ class Stagings(models.Model):
|
|||||||
s.write(vals)
|
s.write(vals)
|
||||||
|
|
||||||
def action_cancel(self):
|
def action_cancel(self):
|
||||||
self.cancel("explicitly cancelled by %s", self.env.user.display_name)
|
w = self.env['runbot_merge.stagings.cancel'].create({
|
||||||
return { 'type': 'ir.actions.act_window_close' }
|
'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):
|
def cancel(self, reason, *args):
|
||||||
self = self.filtered('active')
|
self = self.filtered('active')
|
||||||
|
27
runbot_merge/models/staging_cancel/__init__.py
Normal file
27
runbot_merge/models/staging_cancel/__init__.py
Normal 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' }
|
17
runbot_merge/models/staging_cancel/views.xml
Normal file
17
runbot_merge/models/staging_cancel/views.xml
Normal 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>
|
@ -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_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_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_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_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_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
|
access_runbot_merge_fetch_job_admin,Admin access to fetch jobs,model_runbot_merge_fetch_job,runbot_merge.group_admin,1,1,1,1
|
||||||
|
|
Loading…
Reference in New Issue
Block a user