From c814ce8f343744b2ed1202f71f6cdbe90904c4d5 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 22 Nov 2018 16:01:44 +0100 Subject: [PATCH] [FIX] runbot_merge: tagging on closed PR Closed tagging was broken since the raw-sql alterations of the close hook: because it's raw SQL, the write() method doesn't get invoked anymore and as a result the tagging feedback record is not created, and never executed. Add a test to check for the PR's proper tagging, and fix this issue by explicitly creating a tagging record. Closes #49 --- runbot_merge/controllers/__init__.py | 11 +++++++++-- runbot_merge/tests/test_basic.py | 3 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/runbot_merge/controllers/__init__.py b/runbot_merge/controllers/__init__.py index 3c15a50c..29d17f21 100644 --- a/runbot_merge/controllers/__init__.py +++ b/runbot_merge/controllers/__init__.py @@ -169,11 +169,12 @@ def handle_pr(env, event): # ignore if the PR is already being updated in a separate transaction # (most likely being merged?) env.cr.execute(''' - SELECT id FROM runbot_merge_pull_requests + SELECT id, state FROM runbot_merge_pull_requests WHERE id = %s AND state != 'merged' FOR UPDATE SKIP LOCKED; ''', [pr_obj.id]) - if not env.cr.fetchall(): + res = env.cr.fetchone() + if not res: return 'Ignored: could not lock rows (probably being merged)' env.cr.execute(''' @@ -183,6 +184,12 @@ def handle_pr(env, event): ''', [pr_obj.id]) env.cr.commit() if env.cr.rowcount: + env['runbot_merge.pull_requests.tagging'].create({ + 'pull_request': pr_obj.number, + 'repository': repo.id, + 'state_from': res[1], + 'state_to': 'closed', + }) pr_obj.staging_id.cancel( "PR %s:%s closed by %s", pr_obj.repository.name, pr_obj.number, diff --git a/runbot_merge/tests/test_basic.py b/runbot_merge/tests/test_basic.py index fbd0d57e..ac3684af 100644 --- a/runbot_merge/tests/test_basic.py +++ b/runbot_merge/tests/test_basic.py @@ -567,9 +567,12 @@ def test_close_staged(env, repo): assert pr.staging_id prx.close() + env['runbot_merge.project']._send_feedback() assert not pr.staging_id assert not env['runbot_merge.stagings'].search([]) + assert pr.state == 'closed' + assert prx.labels == {'seen 🙂', 'closed 💔'} def test_forward_port(env, repo): m = repo.make_commit(None, 'initial', None, tree={'m': 'm'})