Skip to content

Commit 9226daa

Browse files
authored
Bitbucket Server: Add support to include required reviewers for PR (#1216)
Also add separate API to get required reviewers for a PR See https://developer.atlassian.com/server/bitbucket/rest/v811/api-group-pull-requests/#api-default-reviewers-latest-projects-projectkey-repos-repositoryslug-reviewers-get
1 parent 08dce8d commit 9226daa

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

atlassian/bitbucket/__init__.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,37 @@ def get_pull_requests(
15911591
params["at"] = at
15921592
return self._get_paged(url, params=params)
15931593

1594+
def get_required_reviewers_for_pull_request(
1595+
self, source_project, source_repo, dest_project, dest_repo, source_branch, dest_branch
1596+
):
1597+
"""
1598+
Get required reviewers for PR creation
1599+
:param source_project: the project that the PR source is from
1600+
:param source_repo: the repository that the PR source is from
1601+
:param source_branch: the branch name of the PR
1602+
:param dest_project: the project that the PR destination is from
1603+
:param dest_repo: the repository that the PR destination is from
1604+
:param dest_branch: where the PR is being merged into
1605+
:return:
1606+
"""
1607+
url = "{}/reviewers".format(
1608+
self._url_repo(
1609+
dest_project,
1610+
dest_repo,
1611+
api_root="rest/default-reviewers",
1612+
api_version="1.0",
1613+
)
1614+
)
1615+
source_repo_id = self.get_repo(source_project, source_repo)["id"]
1616+
dest_repo_id = self.get_repo(dest_project, dest_repo)["id"]
1617+
params = {
1618+
"sourceRepoId": source_repo_id,
1619+
"sourceRefId": source_branch,
1620+
"targetRepoId": dest_repo_id,
1621+
"targetRefId": dest_branch,
1622+
}
1623+
return self.get(url, params=params)
1624+
15941625
def open_pull_request(
15951626
self,
15961627
source_project,
@@ -1602,6 +1633,7 @@ def open_pull_request(
16021633
title,
16031634
description,
16041635
reviewers=None,
1636+
include_required_reviewers=False,
16051637
):
16061638
"""
16071639
Create a new pull request between two branches.
@@ -1617,6 +1649,7 @@ def open_pull_request(
16171649
:param title: the title of the PR
16181650
:param description: the description of what the PR does
16191651
:param reviewers: the list of reviewers or a single reviewer of the PR
1652+
:param include_required_reviewers: OPTIONAL defaults to False, include required reviewers for the PR
16201653
:return:
16211654
"""
16221655
body = {
@@ -1645,6 +1678,13 @@ def add_reviewer(reviewer_name):
16451678
entry = {"user": {"name": reviewer_name}}
16461679
body["reviewers"].append(entry)
16471680

1681+
if not self.cloud and include_required_reviewers:
1682+
required_reviewers = self.get_required_reviewers_for_pull_request(
1683+
source_project, source_repo, dest_project, dest_repo, source_branch, destination_branch
1684+
)
1685+
for required_reviewer in required_reviewers:
1686+
add_reviewer(required_reviewer["name"])
1687+
16481688
if reviewers is not None:
16491689
if isinstance(reviewers, str):
16501690
add_reviewer(reviewers)

docs/bitbucket.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,9 @@ Manage code
211211
# Reply to a comment of a pull request
212212
bitbucket.add_pull_request_comment(project, repository, pull_request_id, text, parent_id=None)
213213
214+
# Get required reviewers for PR creation
215+
bitbucket.get_required_reviewers_for_pull_request(source_project, source_repo, dest_project, dest_repo, source_branch, dest_branch)
216+
214217
# Create a new pull request between two branches.
215218
bitbucket.open_pull_request(source_project, source_repo, dest_project, dest_repo, source_branch, destination_branch, title, description)
216219
@@ -220,6 +223,9 @@ Manage code
220223
# Create a new pull request between two branches with multiple reviewers.
221224
bitbucket.open_pull_request(source_project, source_repo, dest_project, dest_repo, source_branch, destination_branch, title, description, reviewers=['name1', 'name2'])
222225
226+
# Create a new pull request between two branches with required reviewers.
227+
bitbucket.open_pull_request(source_project, source_repo, dest_project, dest_repo, source_branch, destination_branch, title, description, include_required_reviewers=True)
228+
223229
# Delete a pull request
224230
bitbucket.delete_pull_request(project, repository, pull_request_id, pull_request_version)
225231

0 commit comments

Comments
 (0)