diff --git a/runbot_merge/models/pull_requests.py b/runbot_merge/models/pull_requests.py index 5af8db80..efb04e78 100644 --- a/runbot_merge/models/pull_requests.py +++ b/runbot_merge/models/pull_requests.py @@ -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({ diff --git a/runbot_merge/tests/test_basic.py b/runbot_merge/tests/test_basic.py index 4c9bf19d..6e327325 100644 --- a/runbot_merge/tests/test_basic.py +++ b/runbot_merge/tests/test_basic.py @@ -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):