11# coding=utf-8
22import logging
3+ from enum import Enum
4+ from typing import Optional , Union
35
46from deprecated import deprecated
57from requests import HTTPError
1012log = logging .getLogger (__name__ )
1113
1214
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+
1325class Bitbucket (BitbucketBase ):
1426 def __init__ (self , url , * args , ** kwargs ):
1527 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):
21942206 url = "{}/merge" .format (self ._url_pull_request (project_key , repository_slug , pr_id ))
21952207 return self .get (url )
21962208
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+ ):
21982219 """
21992220 Merge pull request
22002221 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):
22042225 :param repository_slug: my_shiny_repo
22052226 :param pr_id: 2341
22062227 :param pr_version:
2228+ :param merge_message: "feat: add new file handler"
2229+ :param close_source_branch: True
2230+ :param merge_strategy: "squash"
22072231 :return:
22082232 """
22092233 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+ }
22112239 if not self .cloud :
22122240 params ["version" ] = pr_version
22132241 return self .post (url , params = params )
0 commit comments