1
1
# coding=utf-8
2
2
import logging
3
+ from enum import Enum
4
+ from typing import Optional , Union
3
5
4
6
from deprecated import deprecated
5
7
from requests import HTTPError
10
12
log = logging .getLogger (__name__ )
11
13
12
14
15
+ class MergeStrategy (Enum ):
16
+ """
17
+ Merge strategies used by the merge_pull_request method.
18
+ """
19
+
20
+ MERGE_COMMIT = "merge_commit"
21
+ SQUASH = "squash"
22
+ FAST_FORWARD = "fast_forward"
23
+
24
+
13
25
class Bitbucket (BitbucketBase ):
14
26
def __init__ (self , url , * args , ** kwargs ):
15
27
if "cloud" not in kwargs and ("bitbucket.org" in url ):
@@ -2194,7 +2206,16 @@ def is_pull_request_can_be_merged(self, project_key, repository_slug, pr_id):
2194
2206
url = "{}/merge" .format (self ._url_pull_request (project_key , repository_slug , pr_id ))
2195
2207
return self .get (url )
2196
2208
2197
- def merge_pull_request (self , project_key , repository_slug , pr_id , pr_version ):
2209
+ def merge_pull_request (
2210
+ self ,
2211
+ project_key : str ,
2212
+ repository_slug : str ,
2213
+ pr_id : int ,
2214
+ pr_version : Optional [int ],
2215
+ merge_message : str ,
2216
+ close_source_branch : bool = False ,
2217
+ merge_strategy : Union [str , MergeStrategy ] = MergeStrategy .MERGE_COMMIT ,
2218
+ ):
2198
2219
"""
2199
2220
Merge pull request
2200
2221
The authenticated user must have REPO_READ permission for the repository
@@ -2204,10 +2225,17 @@ def merge_pull_request(self, project_key, repository_slug, pr_id, pr_version):
2204
2225
:param repository_slug: my_shiny_repo
2205
2226
:param pr_id: 2341
2206
2227
:param pr_version:
2228
+ :param merge_message: "feat: add new file handler"
2229
+ :param close_source_branch: True
2230
+ :param merge_strategy: "squash"
2207
2231
:return:
2208
2232
"""
2209
2233
url = "{}/merge" .format (self ._url_pull_request (project_key , repository_slug , pr_id ))
2210
- params = {}
2234
+ params = {
2235
+ "message" : merge_message ,
2236
+ "close_source_branch" : close_source_branch ,
2237
+ "merge_strategy" : MergeStrategy (merge_strategy ).value ,
2238
+ }
2211
2239
if not self .cloud :
2212
2240
params ["version" ] = pr_version
2213
2241
return self .post (url , params = params )
0 commit comments