Skip to content

Commit e8b0728

Browse files
Merge pull request #154 from ochrstn/fix/gitlab-branch-cannot-merge
fix(gitlab): retry failed merges due to server still processing merge request
2 parents 80a349a + fc0d875 commit e8b0728

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

gitopscli/git_api/gitlab_git_repo_api_adapter.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
from typing import Optional
2+
import logging
3+
import time
24
import requests
35

46
import gitlab
57
from gitopscli.gitops_exception import GitOpsException
68

79
from .git_repo_api import GitRepoApi
810

11+
MAX_MERGE_RETRIES = 5
12+
913

1014
class GitlabGitRepoApiAdapter(GitRepoApi):
1115
def __init__(
@@ -57,7 +61,22 @@ def create_pull_request(
5761

5862
def merge_pull_request(self, pr_id: int) -> None:
5963
merge_request = self.__project.mergerequests.get(pr_id)
60-
merge_request.merge()
64+
65+
max_retries = MAX_MERGE_RETRIES
66+
while max_retries > 0:
67+
try:
68+
merge_request.merge()
69+
return
70+
except gitlab.exceptions.GitlabMRClosedError as ex:
71+
# "Branch cannot be merged" error can occur if the server
72+
# is still processing the merge request internally
73+
max_retries -= 1
74+
logging.warning(
75+
"Retry merging pull request. Attempts: (%s/%s)", MAX_MERGE_RETRIES - max_retries, MAX_MERGE_RETRIES
76+
)
77+
if max_retries == 0:
78+
raise GitOpsException("Error merging pull request: 'Branch cannot be merged'") from ex
79+
time.sleep(2.5)
6180

6281
def add_pull_request_comment(self, pr_id: int, text: str, parent_id: Optional[int] = None) -> None:
6382
merge_request = self.__project.mergerequests.get(pr_id)

0 commit comments

Comments
 (0)