[FIX] runbot_merge: behaviour when no CI are required

If the required_statuses are empty, PRs should always be
validated (and just require a review) rather than never be merge-able.

Fixes #216
This commit is contained in:
Xavier Morel 2019-10-03 16:04:30 +02:00
parent 0152271fb8
commit 60c8f0f498
2 changed files with 20 additions and 4 deletions

View File

@ -812,7 +812,7 @@ class PullRequests(models.Model):
# targets
failed = self.browse(())
for pr in self:
required = pr.repository.project_id.required_statuses.split(',')
required = filter(None, pr.repository.project_id.required_statuses.split(','))
success = True
for ci in required:
@ -830,7 +830,6 @@ class PullRequests(models.Model):
'pull_request': pr.number,
'message': "%r failed on this reviewed PR." % ci,
})
if success:
oldstate = pr.state
if oldstate == 'opened':
@ -860,8 +859,7 @@ class PullRequests(models.Model):
def create(self, vals):
pr = super().create(vals)
c = self.env['runbot_merge.commit'].search([('sha', '=', pr.head)])
if c and c.statuses:
pr._validate(json.loads(c.statuses))
pr._validate(json.loads(c.statuses or '{}'))
if pr.state not in ('closed', 'merged'):
self.env['runbot_merge.pull_requests.tagging'].create({

View File

@ -871,6 +871,24 @@ def test_reopen_state(env, repo):
assert pr.state == 'validated', \
"if a PR is reopened and had a CI'd head, it should be validated immediately"
def test_no_required_statuses(env, repo):
""" check that mergebot can work on a repo with no CI at all
"""
env['runbot_merge.project'].search([]).required_statuses = ''
m = repo.make_commit(None, 'initial', None, tree={'0': '0'})
repo.make_ref('heads/master', m)
c = repo.make_commit(m, 'first', None, tree={'0': '1'})
prx = repo.make_pr('title', 'body', target='master', ctid=c, user='user')
prx.post_comment('hansen r+', 'reviewer')
run_crons(env)
assert env['runbot_merge.pull_requests'].search([
('repository.name', '=', repo.name),
('number', '=', prx.number)
]).state == 'ready'
class TestRetry:
@pytest.mark.xfail(reason="This may not be a good idea as it could lead to tons of rebuild spam")
def test_auto_retry_push(self, env, repo):