X Tutup
Skip to content

Commit 06aa5fd

Browse files
committed
add mr to merge train
1 parent 7817cd2 commit 06aa5fd

File tree

2 files changed

+55
-97
lines changed

2 files changed

+55
-97
lines changed

gitlab/v4/objects/merge_trains.py

Lines changed: 53 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,82 @@
22
from gitlab.mixins import ListMixin
33
from gitlab import cli
44
from gitlab import exceptions as exc
5-
from typing import Any, cast, Dict, Optional, TYPE_CHECKING, Union
6-
from gitlab.types import RequiredOptional
5+
from typing import Any, Dict, Optional, Union
76

87
import requests
98

109
__all__ = [
1110
"ProjectMergeTrain",
1211
"ProjectMergeTrainManager",
13-
# "ProjectMergeTrainMergeRequest",
14-
# "ProjectMergeTrainMergeRequestManager",
12+
"ProjectMergeTrainMergeRequest",
13+
"ProjectMergeTrainMergeRequestManager",
1514
]
1615

1716

1817
class ProjectMergeTrain(RESTObject):
18+
pass
19+
20+
21+
class ProjectMergeTrainMergeRequest(RESTObject):
22+
_id_attr = "merge_request_iid"
23+
24+
25+
class ProjectMergeTrainManager(ListMixin, RESTManager):
1926
_path = "/projects/{project_id}/merge_trains"
27+
_obj_cls = ProjectMergeTrain
28+
_from_parent_attrs = {"project_id": "id"}
29+
_list_filters = ("scope",)
30+
31+
32+
class ProjectMergeTrainMergeRequestManager(RESTManager):
33+
_path = "/projects/{project_id}/merge_trains"
34+
_obj_cls = ProjectMergeTrainMergeRequest
35+
_from_parent_attrs = {"project_id": "id"}
2036

21-
@cli.register_custom_action("ProjectMergeTrain")
22-
def add(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
37+
@cli.register_custom_action(
38+
"ProjectMergeTrainMergeRequestManager",
39+
(),
40+
(
41+
"when_pipeline_succeeds",
42+
"squash",
43+
"sha",
44+
)
45+
46+
)
47+
@exc.on_http_error(exc.GitlabCreateError)
48+
def add(
49+
self,
50+
merge_request_iid: Union[str, int],
51+
when_pipeline_succeeds: Optional[bool] = None,
52+
squash: Optional[bool] = None,
53+
**kwargs: Any
54+
) -> Union[Dict[str, Any], requests.Response]:
2355
"""Attempt to merge changes between source and target branches into
2456
`/projects/:id/merge_trains/merge_requests/:merge_request_iid`.
2557
2658
Args:
2759
merge_request_iid: merge request id of the MR
60+
when_pipeline_succeeds: if true, the merge request is added to the merge train when the pipeline succeeds.
61+
When false or unspecified, the merge request is added directly to the merge train.
62+
squash: If true, the commits are squashed into a single commit on merge.
2863
**kwargs: Extra options to send to the server (e.g. sudo)
2964
3065
Raises:
31-
GitlabGetError: If cannot be merged
66+
GitlabCreateError: If cannot add mr to merge train
3267
"""
3368
path = (
34-
f"{self.manager.path}/merge_requests/{self.encoded_id}"
69+
f"{self.path}/merge_requests/{merge_request_iid}"
3570
)
3671
data: Dict[str, Any] = {}
37-
data["when_pipeline_succeeds"] = True
38-
return self.manager.gitlab.http_post(path, post_data=data, **kwargs)
72+
if when_pipeline_succeeds:
73+
data["when_pipeline_succeeds"] = True
74+
if squash:
75+
data["squash"] = True
76+
return self.gitlab.http_post(path, post_data=data, **kwargs)
3977

40-
@cli.register_custom_action("ProjectMergeTrain")
41-
def get_mr(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
78+
@cli.register_custom_action("ProjectMergeTrainMergeRequestManager")
79+
@exc.on_http_error(exc.GitlabGetError)
80+
def get_mr(self, merge_request_iid: Union[str, int], **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
4281
"""Attempt to merge changes between source and target branches into
4382
`/projects/:id/merge_trains/merge_requests/:merge_request_iid`.
4483
@@ -49,87 +88,5 @@ def get_mr(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
4988
Raises:
5089
GitlabGetError: If cannot be merged
5190
"""
52-
path = f"{self.manager.path}/merge_requests/{self.encoded_id}"
53-
return self.manager.gitlab.http_get(path, **kwargs)
54-
55-
56-
# class ProjectMergeTrainMergeRequest(ListMixin, RESTObject, RESTManager):
57-
# _path = "/projects/{project_id}/merge_trains/merge_requests"
58-
# _from_parent_attrs = {"project_id": "id"}
59-
# _optional_get_attrs = (
60-
# "when_pipeline_succeeds",
61-
# "sha",
62-
# "squash"
63-
# )
64-
65-
class ProjectMergeTrainManager(ListMixin, RESTManager, ProjectMergeTrain):
66-
_path = "/projects/{project_id}/merge_trains"
67-
_obj_cls = ProjectMergeTrain
68-
_from_parent_attrs = {"project_id": "id"}
69-
_list_filters = ("scope",)
70-
_update_attrs = RequiredOptional(optional=("when_pipeline_succeeds", "squash",))
71-
_optional_get_attrs = (
72-
"when_pipeline_succeeds",
73-
"sha",
74-
"squash"
75-
)
76-
77-
78-
# @exc.on_http_error(exc.GitlabGetError)
79-
# def get(self, id: Union[str, int], **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
80-
# """Attempt to merge changes between source and target branches into
81-
# `/projects/:id/merge_trains/merge_requests/:merge_request_iid`.
82-
#
83-
# Args:
84-
# merge_request_iid: merge request id of the MR
85-
# **kwargs: Extra options to send to the server (e.g. sudo)
86-
#
87-
# Raises:
88-
# GitlabGetError: If cannot be merged
89-
# """
90-
# path = f"{self.manager.path}/merge_requests/{id}"
91-
# return self.manager.gitlab.http_get(path, **kwargs)
92-
#
93-
# #@cli.register_custom_action("ProjectMergeTrain")
94-
# @exc.on_http_error(exc.GitlabGetError)
95-
# def add(self, id: Union[str, int], **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
96-
# """Attempt to merge changes between source and target branches into
97-
# `/projects/:id/merge_trains/merge_requests/:merge_request_iid`.
98-
#
99-
# Args:
100-
# merge_request_iid: merge request id of the MR
101-
# **kwargs: Extra options to send to the server (e.g. sudo)
102-
#
103-
# Raises:
104-
# GitlabGetError: If cannot be merged
105-
# """
106-
# path = f"{self.manager.path}/merge_requests/{id}"
107-
# return self.manager.gitlab.http_post(path, **kwargs)
108-
#
109-
#
110-
# # class ProjectMergeTrainMergeRequestManager(ProjectMergeTrainMergeRequest):
111-
# # pass
112-
#
113-
#
114-
#
115-
# #
116-
# # class ProjectMergeTrainMergeRequestManager(ListMixin, RESTManager):
117-
# # _path = "/projects/{project_id}/merge_trains/merge_request"
118-
# #
119-
# #
120-
# #
121-
# # @cli.register_custom_action("MergeTrain", ("merge_request_iid",))
122-
# @exc.on_http_error(exc.GitlabDeleteError)
123-
# def unshare(self, group_id: int, **kwargs: Any) -> None:
124-
# """Delete a shared project link within a group.
125-
#
126-
# Args:
127-
# group_id: ID of the group.
128-
# **kwargs: Extra options to send to the server (e.g. sudo)
129-
#
130-
# Raises:
131-
# GitlabAuthenticationError: If authentication is not correct
132-
# GitlabDeleteError: If the server failed to perform the request
133-
# """
134-
# path = f"/projects/{self.encoded_id}/share/{group_id}"
135-
# self.manager.gitlab.http_delete(path, **kwargs)
91+
path = f"{self.path}/merge_requests/{merge_request_iid}"
92+
return self.gitlab.http_get(path, **kwargs)

gitlab/v4/objects/projects.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
ProjectApprovalRuleManager,
6767
)
6868
from .merge_requests import ProjectMergeRequestManager # noqa: F401
69-
from .merge_trains import ProjectMergeTrainManager # noqa: F401
69+
from .merge_trains import ProjectMergeTrainManager, ProjectMergeTrainMergeRequestManager # noqa: F401
7070
from .milestones import ProjectMilestoneManager # noqa: F401
7171
from .notes import ProjectNoteManager # noqa: F401
7272
from .notification_settings import ProjectNotificationSettingsManager # noqa: F401
@@ -196,6 +196,7 @@ class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RepositoryMixin, RESTO
196196
members_all: ProjectMemberAllManager
197197
mergerequests: ProjectMergeRequestManager
198198
merge_trains: ProjectMergeTrainManager
199+
merge_trains_merge_request: ProjectMergeTrainMergeRequestManager
199200
milestones: ProjectMilestoneManager
200201
notes: ProjectNoteManager
201202
notificationsettings: ProjectNotificationSettingsManager

0 commit comments

Comments
 (0)
X Tutup