Skip to content

Commit ea589f2

Browse files
authored
feat: introduce related_issues to merge requests
1 parent a2ab54c commit ea589f2

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

docs/gl_objects/merge_requests.rst

+4
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ List the changes of a MR::
144144

145145
changes = mr.changes()
146146

147+
List issues related to this merge request::
148+
149+
related_issues = mr.related_issues()
150+
147151
List issues that will close on merge::
148152

149153
mr.closes_issues()

gitlab/v4/objects/merge_requests.py

+29
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,35 @@ def cancel_merge_when_pipeline_succeeds(self, **kwargs: Any) -> Dict[str, str]:
197197
assert isinstance(server_data, dict)
198198
return server_data
199199

200+
@cli.register_custom_action(cls_names="ProjectMergeRequest")
201+
@exc.on_http_error(exc.GitlabListError)
202+
def related_issues(self, **kwargs: Any) -> RESTObjectList:
203+
"""List issues related to this merge request."
204+
205+
Args:
206+
all: If True, return all the items, without pagination
207+
per_page: Number of items to retrieve per request
208+
page: ID of the page to return (starts with page 1)
209+
**kwargs: Extra options to send to the server (e.g. sudo)
210+
211+
Raises:
212+
GitlabAuthenticationError: If authentication is not correct
213+
GitlabListError: If the list could not be retrieved
214+
215+
Returns:
216+
List of issues
217+
"""
218+
219+
path = f"{self.manager.path}/{self.encoded_id}/related_issues"
220+
data_list = self.manager.gitlab.http_list(path, iterator=True, **kwargs)
221+
222+
if TYPE_CHECKING:
223+
assert isinstance(data_list, gitlab.GitlabList)
224+
225+
manager = ProjectIssueManager(self.manager.gitlab, parent=self.manager._parent)
226+
227+
return RESTObjectList(manager, ProjectIssue, data_list)
228+
200229
@cli.register_custom_action(cls_names="ProjectMergeRequest")
201230
@exc.on_http_error(exc.GitlabListError)
202231
def closes_issues(self, **kwargs: Any) -> RESTObjectList:

tests/unit/objects/test_merge_requests.py

+8
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
"web_url": "http://gitlab.example.com//kenyatta_oconnell",
4141
}
4242
],
43+
"related_issues": [
44+
1, 2
45+
]
4346
}
4447

4548
reviewers_content = [
@@ -93,6 +96,11 @@ def resp_get_merge_request_reviewers():
9396
yield rsps
9497

9598

99+
def test_list_related_issues(project, resp_list_merge_requests):
100+
mrs = project.mergerequests.list()
101+
assert isinstance(mrs[0], ProjectMergeRequest)
102+
assert mrs[0].related_issues == mr_content["related_issues"]
103+
96104
def test_list_project_merge_requests(project, resp_list_merge_requests):
97105
mrs = project.mergerequests.list()
98106
assert isinstance(mrs[0], ProjectMergeRequest)

0 commit comments

Comments
 (0)