2020-11-17 21:21:21 +07:00
|
|
|
from utils import Commit, make_basic
|
2019-10-15 13:54:25 +07:00
|
|
|
|
|
|
|
|
|
|
|
def test_single_updated(env, config, make_repo):
|
|
|
|
""" Given co-dependent PRs getting merged, one of them being modified should
|
|
|
|
lead to a restart of the merge & forward port process.
|
|
|
|
|
|
|
|
See test_update_pr for a simpler (single-PR) version
|
|
|
|
"""
|
|
|
|
r1, _ = make_basic(env, config, make_repo, reponame='repo-1')
|
|
|
|
r2, _ = make_basic(env, config, make_repo, reponame='repo-2')
|
|
|
|
|
|
|
|
with r1:
|
|
|
|
r1.make_commits('a', Commit('1', tree={'1': '0'}), ref='heads/aref')
|
|
|
|
pr1 = r1.make_pr(target='a', head='aref')
|
|
|
|
r1.post_status('aref', 'success', 'legal/cla')
|
|
|
|
r1.post_status('aref', 'success', 'ci/runbot')
|
|
|
|
pr1.post_comment('hansen r+', config['role_reviewer']['token'])
|
|
|
|
with r2:
|
|
|
|
r2.make_commits('a', Commit('2', tree={'2': '0'}), ref='heads/aref')
|
|
|
|
pr2 = r2.make_pr(target='a', head='aref')
|
|
|
|
r2.post_status('aref', 'success', 'legal/cla')
|
|
|
|
r2.post_status('aref', 'success', 'ci/runbot')
|
|
|
|
pr2.post_comment('hansen r+', config['role_reviewer']['token'])
|
|
|
|
env.run_crons()
|
|
|
|
|
|
|
|
with r1, r2:
|
|
|
|
r1.post_status('staging.a', 'success', 'legal/cla')
|
|
|
|
r1.post_status('staging.a', 'success', 'ci/runbot')
|
|
|
|
r2.post_status('staging.a', 'success', 'legal/cla')
|
|
|
|
r2.post_status('staging.a', 'success', 'ci/runbot')
|
|
|
|
env.run_crons()
|
|
|
|
|
|
|
|
pr1_id, pr11_id, pr2_id, pr21_id = pr_ids = env['runbot_merge.pull_requests'].search([]).sorted('display_name')
|
|
|
|
assert pr1_id.number == pr1.number
|
|
|
|
assert pr2_id.number == pr2.number
|
|
|
|
assert pr1_id.state == pr2_id.state == 'merged'
|
|
|
|
|
|
|
|
assert pr11_id.parent_id == pr1_id
|
|
|
|
assert pr11_id.repository.name == pr1_id.repository.name == r1.name
|
|
|
|
|
|
|
|
assert pr21_id.parent_id == pr2_id
|
|
|
|
assert pr21_id.repository.name == pr2_id.repository.name == r2.name
|
|
|
|
|
|
|
|
assert pr11_id.target.name == pr21_id.target.name == 'b'
|
|
|
|
|
|
|
|
# don't even bother faking CI failure, straight update pr21_id
|
|
|
|
repo, ref = r2.get_pr(pr21_id.number).branch
|
|
|
|
with repo:
|
|
|
|
repo.make_commits(
|
|
|
|
pr21_id.target.name,
|
|
|
|
Commit('Whops', tree={'2': '1'}),
|
|
|
|
ref='heads/' + ref,
|
|
|
|
make=False
|
|
|
|
)
|
|
|
|
env.run_crons()
|
|
|
|
|
|
|
|
assert not pr21_id.parent_id
|
|
|
|
|
|
|
|
with r1, r2:
|
|
|
|
r1.post_status(pr11_id.head, 'success', 'legal/cla')
|
|
|
|
r1.post_status(pr11_id.head, 'success', 'ci/runbot')
|
|
|
|
r1.get_pr(pr11_id.number).post_comment('hansen r+', config['role_reviewer']['token'])
|
|
|
|
r2.post_status(pr21_id.head, 'success', 'legal/cla')
|
|
|
|
r2.post_status(pr21_id.head, 'success', 'ci/runbot')
|
|
|
|
r2.get_pr(pr21_id.number).post_comment('hansen r+', config['role_reviewer']['token'])
|
|
|
|
env.run_crons()
|
|
|
|
|
|
|
|
prs_again = env['runbot_merge.pull_requests'].search([])
|
|
|
|
assert prs_again == pr_ids,\
|
|
|
|
"should not have created FP PRs as we're now in a detached (iso new PR) state " \
|
|
|
|
"(%s)" % prs_again.mapped('display_name')
|
|
|
|
|
|
|
|
with r1, r2:
|
|
|
|
r1.post_status('staging.b', 'success', 'legal/cla')
|
|
|
|
r1.post_status('staging.b', 'success', 'ci/runbot')
|
|
|
|
r2.post_status('staging.b', 'success', 'legal/cla')
|
|
|
|
r2.post_status('staging.b', 'success', 'ci/runbot')
|
|
|
|
env.run_crons()
|
|
|
|
|
|
|
|
new_prs = env['runbot_merge.pull_requests'].search([]).sorted('display_name') - pr_ids
|
|
|
|
assert len(new_prs) == 2, "should have created the new FP PRs"
|
|
|
|
pr12_id, pr22_id = new_prs
|
|
|
|
|
|
|
|
assert pr12_id.source_id == pr1_id
|
|
|
|
assert pr12_id.parent_id == pr11_id
|
|
|
|
|
|
|
|
assert pr22_id.source_id == pr2_id
|
2020-11-17 21:21:21 +07:00
|
|
|
assert pr22_id.parent_id == pr21_id
|