diff --git a/runbot_merge/controllers/__init__.py b/runbot_merge/controllers/__init__.py index c8c71811..05e89b66 100644 --- a/runbot_merge/controllers/__init__.py +++ b/runbot_merge/controllers/__init__.py @@ -174,6 +174,7 @@ def handle_pr(env, event): FOR UPDATE SKIP LOCKED; ''', [pr_obj.id]) res = env.cr.fetchone() + # FIXME: store some sort of "try to close it later" if the merge fails? if not res: return 'Ignored: could not lock rows (probably being merged)' diff --git a/runbot_merge/models/pull_requests.py b/runbot_merge/models/pull_requests.py index b7907422..0ceaaf56 100644 --- a/runbot_merge/models/pull_requests.py +++ b/runbot_merge/models/pull_requests.py @@ -1231,6 +1231,11 @@ class Stagings(models.Model): gh = {repo.name: repo.github() for repo in project.repo_ids} repo_name = None staging_heads = json.loads(self.heads) + self.env.cr.execute(''' + SELECT 1 FROM runbot_merge_pull_requests + WHERE id in %s + FOR UPDATE + ''', [tuple(self.mapped('batch_ids.prs.id'))]) try: repo_name = self._safety_dance(gh, staging_heads) except exceptions.FastForwardError as e: