diff --git a/forwardport/models/project.py b/forwardport/models/project.py index 0e2500b9..b3dce75c 100644 --- a/forwardport/models/project.py +++ b/forwardport/models/project.py @@ -443,10 +443,16 @@ class PullRequests(models.Model): # only link to previous PR of sequence if cherrypick passed 'parent_id': pr.id if not has_conflicts else False, }) + # delegate original author on merged original PR & on new PR so + # they can r+ the forward ports (via mergebot or forwardbot) + source.author.write({ + 'delegate_reviewer': [ + (4, source.id, False), + (4, new_pr.id, False), + ] + }) - assignees = (new_pr.source_id.author | new_pr.source_id.reviewed_by) \ - .filtered(lambda p: new_pr.source_id._pr_acl(p).is_reviewer) \ - .mapped('github_login') + assignees = (source.author | source.reviewed_by).mapped('github_login') ping = "Ping %s" % ', '.join('@' + login for login in assignees if login) if h: sout = serr = '' diff --git a/forwardport/tests/test_simple.py b/forwardport/tests/test_simple.py index 6727f9dc..8ef76dc8 100644 --- a/forwardport/tests/test_simple.py +++ b/forwardport/tests/test_simple.py @@ -191,14 +191,14 @@ def test_straightforward_flow(env, config, make_repo, users): } assert prod.get_pr(pr2.number).comments == [ (users['user'], """\ -Ping @%s +Ping @%s, @%s This PR targets c and is the last of the forward-port chain. To merge the full chain, say > @%s r+ More info at https://github.com/odoo/odoo/wiki/Mergebot#forward-port -""" % (users['reviewer'], project.fp_github_name)), +""" % (users['other'], users['reviewer'], project.fp_github_name)), ] with prod: prod.post_status(pr2.head, 'success', 'ci/runbot') @@ -822,21 +822,21 @@ def test_default_disabled(env, config, make_repo, users): assert len(cs) == 1 assert pr2.comments == [ (users['user'], """\ -Ping @%s +Ping @%s, @%s This PR targets b and is the last of the forward-port chain. To merge the full chain, say > @%s r+ More info at https://github.com/odoo/odoo/wiki/Mergebot#forward-port -""" % (users['reviewer'], users['user'])), +""" % (users['user'], users['reviewer'], users['user'])), ] # reviewer = of the FP sequence, the original PR is always reviewed by `user` # set as reviewer Case = collections.namedtuple('Case', 'author reviewer delegate success') ACL = [ - Case('reviewer', 'reviewer', None, False), + Case('reviewer', 'reviewer', None, True), Case('reviewer', 'self_reviewer', None, False), Case('reviewer', 'other', None, False), Case('reviewer', 'other', 'other', True), @@ -848,7 +848,7 @@ ACL = [ Case('other', 'reviewer', None, True), Case('other', 'self_reviewer', None, False), - Case('other', 'other', None, False), + Case('other', 'other', None, True), Case('other', 'other', 'other', True), ] @pytest.mark.parametrize(Case._fields, ACL)