From 6df9a68af2339be92f82c70fbce31e25d6e2885d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 25 Sep 2018 14:05:41 +0200 Subject: [PATCH] [CHG] runbot_merge: treat github reviews as regular comments Treating them specially turns out to be inconvenient: it becomes harder/riskier to ask for informal reviews (for which GH reviews are useful). --- runbot_merge/controllers/__init__.py | 25 ++++++++++++------------- runbot_merge/tests/test_basic.py | 11 +++++++++++ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/runbot_merge/controllers/__init__.py b/runbot_merge/controllers/__init__.py index f5efcfb3..ff12b0e8 100644 --- a/runbot_merge/controllers/__init__.py +++ b/runbot_merge/controllers/__init__.py @@ -235,28 +235,27 @@ def handle_comment(env, event): return pr._parse_commands(partner, comment) def handle_review(env, event): - partner = env['res.partner'].search([('github_login', '=', event['review']['user']['login'])]) + repo = event['repository']['full_name'] + comment = event['review']['body'] or '' + author = event['review']['user']['login'] + + partner = env['res.partner'].search([('github_login', '=', author)]) if not partner: - _logger.info('ignoring comment from %s: not in system', event['review']['user']['login']) + _logger.info('ignoring comment from %s: not in system', author) return 'ignored' + repository = env['runbot_merge.repository'].search([('name', '=', repo)]) + if not repository.project_id._find_commands(comment): + return "No commands, ignoring" + pr = env['runbot_merge.pull_requests']._get_or_schedule( - event['repository']['full_name'], - event['pull_request']['number'], + repo, event['pull_request']['number'], event['pull_request']['base']['ref'] ) if not pr: return "Unknown PR, scheduling fetch" - firstline = '' - state = event['review']['state'].lower() - if state == 'approved': - firstline = pr.repository.project_id.github_prefix + ' r+' - elif state == 'request_changes': - firstline = pr.repository.project_id.github_prefix + ' r-' - - body = event['review']['body'] - return pr._parse_commands(partner, firstline + (('\n' + body) if body else '')) + return pr._parse_commands(partner, comment) def handle_ping(env, event): print("Got ping! {}".format(event['zen'])) diff --git a/runbot_merge/tests/test_basic.py b/runbot_merge/tests/test_basic.py index e85d7109..61f1e5ee 100644 --- a/runbot_merge/tests/test_basic.py +++ b/runbot_merge/tests/test_basic.py @@ -1675,6 +1675,8 @@ class TestReviewing(object): ]).state == 'ready' def test_actual_review(self, env, repo): + """ treat github reviews as regular comments + """ m = repo.make_commit(None, 'initial', None, tree={'m': 'm'}) m2 = repo.make_commit(m, 'second', None, tree={'m': 'm', 'm2': 'm2'}) repo.make_ref('heads/master', m2) @@ -1692,6 +1694,15 @@ class TestReviewing(object): prx.post_review('APPROVE', 'reviewer', "hansen priority=2") assert pr.priority == 2 + assert pr.state == 'opened' + + prx.post_review('REQUEST_CHANGES', 'reviewer', 'hansen priority=1') + assert pr.priority == 1 + assert pr.state == 'opened' + + + prx.post_review('COMMENT', 'reviewer', 'hansen r+') + assert pr.priority == 1 assert pr.state == 'approved' class TestUnknownPR: