mirror of
https://github.com/odoo/runbot.git
synced 2025-03-27 13:25:47 +07:00
[IMP] runbot_merge: add name_search override to PRs
Should allow filtering PRs by source or parent. Fixes #458
This commit is contained in:
parent
0b1e33da7c
commit
4e4e4303f6
@ -21,6 +21,7 @@ from werkzeug.datastructures import Headers
|
|||||||
|
|
||||||
from odoo import api, fields, models, tools
|
from odoo import api, fields, models, tools
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError
|
||||||
|
from odoo.osv import expression
|
||||||
from odoo.tools import OrderedSet
|
from odoo.tools import OrderedSet
|
||||||
|
|
||||||
from .. import github, exceptions, controllers, utils
|
from .. import github, exceptions, controllers, utils
|
||||||
@ -721,6 +722,25 @@ class PullRequests(models.Model):
|
|||||||
for p in self
|
for p in self
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
||||||
|
print(f'name_search({name!r}, {args!r}, {operator!r})', flush=True)
|
||||||
|
if not name or operator != 'ilike':
|
||||||
|
return super().name_search(name, args=args, operator=operator, limit=limit)
|
||||||
|
bits = [[('label', 'ilike', name)]]
|
||||||
|
if name.isdigit():
|
||||||
|
bits.append([('number', '=', name)])
|
||||||
|
if re.match(r'\w+#\d+$', name):
|
||||||
|
repo, num = name.rsplit('#', 1)
|
||||||
|
bits.append(['&', ('repository.name', 'ilike', repo), ('number', '=', int(num))])
|
||||||
|
else:
|
||||||
|
bits.append([('repository.name', 'ilike', name)])
|
||||||
|
domain = expression.OR(bits)
|
||||||
|
if args:
|
||||||
|
domain = expression.AND([args, domain])
|
||||||
|
print('=>', domain, flush=True)
|
||||||
|
return self.search(domain, limit=limit).sudo().name_get()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _approved(self):
|
def _approved(self):
|
||||||
return self.state in ('approved', 'ready') or any(
|
return self.state in ('approved', 'ready') or any(
|
||||||
|
@ -20,3 +20,43 @@ def test_partner_merge(env):
|
|||||||
assert not p_src.exists()
|
assert not p_src.exists()
|
||||||
assert p_dest.name == 'Partner P. Partnersson'
|
assert p_dest.name == 'Partner P. Partnersson'
|
||||||
assert p_dest.github_login == 'xxx'
|
assert p_dest.github_login == 'xxx'
|
||||||
|
|
||||||
|
def test_name_search(env):
|
||||||
|
""" PRs should be findable by:
|
||||||
|
|
||||||
|
* number
|
||||||
|
* display_name (`repository#number`)
|
||||||
|
* label
|
||||||
|
|
||||||
|
This way we can find parents or sources by these informations.
|
||||||
|
"""
|
||||||
|
p = env['runbot_merge.project'].create({
|
||||||
|
'name': 'proj',
|
||||||
|
'github_token': 'no',
|
||||||
|
})
|
||||||
|
b = env['runbot_merge.branch'].create({
|
||||||
|
'name': 'target',
|
||||||
|
'project_id': p.id
|
||||||
|
})
|
||||||
|
r = env['runbot_merge.repository'].create({
|
||||||
|
'name': 'repo',
|
||||||
|
'project_id': p.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
baseline = {'target': b.id, 'repository': r.id}
|
||||||
|
PRs = env['runbot_merge.pull_requests']
|
||||||
|
prs = PRs.create({**baseline, 'number': 1964, 'label': 'victor:thump', 'head': 'a', 'message': 'x'})\
|
||||||
|
| PRs.create({**baseline, 'number': 1959, 'label': 'marcus:frankenstein', 'head': 'b', 'message': 'y'})\
|
||||||
|
| PRs.create({**baseline, 'number': 1969, 'label': 'victor:patch-1', 'head': 'c', 'message': 'z'})
|
||||||
|
pr0, pr1, pr2 = prs.name_get()
|
||||||
|
|
||||||
|
assert PRs.name_search('1964') == [pr0]
|
||||||
|
assert PRs.name_search('1969') == [pr2]
|
||||||
|
|
||||||
|
assert PRs.name_search('frank') == [pr1]
|
||||||
|
assert PRs.name_search('victor') == [pr2, pr0]
|
||||||
|
|
||||||
|
assert PRs.name_search('thump') == [pr0]
|
||||||
|
|
||||||
|
assert PRs.name_search('repo') == [pr2, pr0, pr1]
|
||||||
|
assert PRs.name_search('repo#1959') == [pr1]
|
||||||
|
Loading…
Reference in New Issue
Block a user