| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 5a1678f commit fd73a73
6 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -29,6 +29,7 @@ API examples | |||
| 29 | 29 | gl_objects/boards | |
| 30 | 30 | gl_objects/labels | |
| 31 | 31 | gl_objects/notifications | |
| 32 | + gl_objects/merge_trains | ||
| 32 | 33 | gl_objects/mrs | |
| 33 | 34 | gl_objects/mr_approvals | |
| 34 | 35 | gl_objects/milestones | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,29 @@ | |||
| 1 | + ############ | ||
| 2 | + Merge Trains | ||
| 3 | + ############ | ||
| 4 | + | ||
| 5 | + Reference | ||
| 6 | + --------- | ||
| 7 | + | ||
| 8 | + * v4 API: | ||
| 9 | + | ||
| 10 | + + :class:`gitlab.v4.objects.ProjectMergeTrain` | ||
| 11 | + + :class:`gitlab.v4.objects.ProjectMergeTrainManager` | ||
| 12 | + + :attr:`gitlab.v4.objects.Project.merge_trains` | ||
| 13 | + | ||
| 14 | + * GitLab API: https://docs.gitlab.com/ee/api/merge_trains.html | ||
| 15 | + | ||
| 16 | + Examples | ||
| 17 | + -------- | ||
| 18 | + | ||
| 19 | + List merge trains for a project:: | ||
| 20 | + | ||
| 21 | + merge_trains = project.merge_trains.list() | ||
| 22 | + | ||
| 23 | + List active merge trains for a project:: | ||
| 24 | + | ||
| 25 | + merge_trains = project.merge_trains.list(scope="active") | ||
| 26 | + | ||
| 27 | + List completed (have been merged) merge trains for a project:: | ||
| 28 | + | ||
| 29 | + merge_trains = project.merge_trains.list(scope="complete") | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -49,6 +49,7 @@ | |||
| 49 | 49 | from .members import * | |
| 50 | 50 | from .merge_request_approvals import * | |
| 51 | 51 | from .merge_requests import * | |
| 52 | + from .merge_trains import * | ||
| 52 | 53 | from .milestones import * | |
| 53 | 54 | from .namespaces import * | |
| 54 | 55 | from .notes import * | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,18 @@ | |||
| 1 | + from gitlab.base import RESTManager, RESTObject | ||
| 2 | + from gitlab.mixins import ListMixin | ||
| 3 | + | ||
| 4 | + __all__ = [ | ||
| 5 | + "ProjectMergeTrain", | ||
| 6 | + "ProjectMergeTrainManager", | ||
| 7 | + ] | ||
| 8 | + | ||
| 9 | + | ||
| 10 | + class ProjectMergeTrain(RESTObject): | ||
| 11 | + pass | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + class ProjectMergeTrainManager(ListMixin, RESTManager): | ||
| 15 | + _path = "/projects/%(project_id)s/merge_trains" | ||
| 16 | + _obj_cls = ProjectMergeTrain | ||
| 17 | + _from_parent_attrs = {"project_id": "id"} | ||
| 18 | + _list_filters = "scope" | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -42,6 +42,7 @@ | |||
| 42 | 42 | ProjectApprovalRuleManager, | |
| 43 | 43 | ) | |
| 44 | 44 | from .merge_requests import ProjectMergeRequestManager # noqa: F401 | |
| 45 | + from .merge_trains import ProjectMergeTrainManager # noqa: F401 | ||
| 45 | 46 | from .milestones import ProjectMilestoneManager # noqa: F401 | |
| 46 | 47 | from .notes import ProjectNoteManager # noqa: F401 | |
| 47 | 48 | from .notification_settings import ProjectNotificationSettingsManager # noqa: F401 | |
@@ -141,6 +142,7 @@ class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RepositoryMixin, RESTO | |||
| 141 | 142 | members: ProjectMemberManager | |
| 142 | 143 | members_all: ProjectMemberAllManager | |
| 143 | 144 | mergerequests: ProjectMergeRequestManager | |
| 145 | + merge_trains: ProjectMergeTrainManager | ||
| 144 | 146 | milestones: ProjectMilestoneManager | |
| 145 | 147 | notes: ProjectNoteManager | |
| 146 | 148 | notificationsettings: ProjectNotificationSettingsManager | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,65 @@ | |||
| 1 | + """ | ||
| 2 | + GitLab API: | ||
| 3 | + https://docs.gitlab.com/ee/api/merge_trains.html | ||
| 4 | + """ | ||
| 5 | + import pytest | ||
| 6 | + import responses | ||
| 7 | + | ||
| 8 | + from gitlab.v4.objects import ProjectMergeTrain | ||
| 9 | + | ||
| 10 | + mr_content = { | ||
| 11 | + "id": 110, | ||
| 12 | + "merge_request": { | ||
| 13 | + "id": 1, | ||
| 14 | + "iid": 1, | ||
| 15 | + "project_id": 3, | ||
| 16 | + "title": "Test merge train", | ||
| 17 | + "description": "", | ||
| 18 | + "state": "merged", | ||
| 19 | + "created_at": "2020-02-06T08:39:14.883Z", | ||
| 20 | + "updated_at": "2020-02-06T08:40:57.038Z", | ||
| 21 | + "web_url": "http://gitlab.example.com/root/merge-train-race-condition/-/merge_requests/1", | ||
| 22 | + }, | ||
| 23 | + "user": { | ||
| 24 | + "id": 1, | ||
| 25 | + "name": "Administrator", | ||
| 26 | + "username": "root", | ||
| 27 | + "state": "active", | ||
| 28 | + "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", | ||
| 29 | + "web_url": "http://gitlab.example.com/root", | ||
| 30 | + }, | ||
| 31 | + "pipeline": { | ||
| 32 | + "id": 246, | ||
| 33 | + "sha": "bcc17a8ffd51be1afe45605e714085df28b80b13", | ||
| 34 | + "ref": "refs/merge-requests/1/train", | ||
| 35 | + "status": "success", | ||
| 36 | + "created_at": "2020-02-06T08:40:42.410Z", | ||
| 37 | + "updated_at": "2020-02-06T08:40:46.912Z", | ||
| 38 | + "web_url": "http://gitlab.example.com/root/merge-train-race-condition/pipelines/246", | ||
| 39 | + }, | ||
| 40 | + "created_at": "2020-02-06T08:39:47.217Z", | ||
| 41 | + "updated_at": "2020-02-06T08:40:57.720Z", | ||
| 42 | + "target_branch": "feature-1580973432", | ||
| 43 | + "status": "merged", | ||
| 44 | + "merged_at": "2020-02-06T08:40:57.719Z", | ||
| 45 | + "duration": 70, | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + | ||
| 49 | + @pytest.fixture | ||
| 50 | + def resp_list_merge_trains(): | ||
| 51 | + with responses.RequestsMock() as rsps: | ||
| 52 | + rsps.add( | ||
| 53 | + method=responses.GET, | ||
| 54 | + url="http://localhost/api/v4/projects/1/merge_trains", | ||
| 55 | + json=[mr_content], | ||
| 56 | + content_type="application/json", | ||
| 57 | + status=200, | ||
| 58 | + ) | ||
| 59 | + yield rsps | ||
| 60 | + | ||
| 61 | + | ||
| 62 | + def test_list_project_merge_requests(project, resp_list_merge_trains): | ||
| 63 | + merge_trains = project.merge_trains.list() | ||
| 64 | + assert isinstance(merge_trains[0], ProjectMergeTrain) | ||
| 65 | + assert merge_trains[0].id == mr_content["id"] | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments