1 package gitlab
2
3 import (
4 "fmt"
5 "net/http"
6 "time"
7 )
8
9
10
11
12
13 type MergeTrainsService struct {
14 client *Client
15 }
16
17
18
19
20 type MergeTrain struct {
21 ID int `json:"id"`
22 MergeRequest *MergeTrainMergeRequest `json:"merge_request"`
23 User *BasicUser `json:"user"`
24 Pipeline *Pipeline `json:"pipeline"`
25 CreatedAt *time.Time `json:"created_at"`
26 UpdatedAt *time.Time `json:"updated_at"`
27 TargetBranch string `json:"target_branch"`
28 Status string `json:"status"`
29 MergedAt *time.Time `json:"merged_at"`
30 Duration int `json:"duration"`
31 }
32
33
34
35
36 type MergeTrainMergeRequest struct {
37 ID int `json:"id"`
38 IID int `json:"iid"`
39 ProjectID int `json:"project_id"`
40 Title string `json:"title"`
41 Description string `json:"description"`
42 State string `json:"state"`
43 CreatedAt *time.Time `json:"created_at"`
44 UpdatedAt *time.Time `json:"updated_at"`
45 WebURL string `json:"web_url"`
46 }
47
48
49
50
51
52 type ListMergeTrainsOptions struct {
53 ListOptions
54 Scope *string `url:"scope,omitempty" json:"scope,omitempty"`
55 Sort *string `url:"sort,omitempty" json:"sort,omitempty"`
56 }
57
58
59
60
61
62 func (s *MergeTrainsService) ListProjectMergeTrains(pid interface{}, opt *ListMergeTrainsOptions, options ...RequestOptionFunc) ([]*MergeTrain, *Response, error) {
63 project, err := parseID(pid)
64 if err != nil {
65 return nil, nil, err
66 }
67 u := fmt.Sprintf("projects/%s/merge_trains", PathEscape(project))
68
69 req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
70 if err != nil {
71 return nil, nil, err
72 }
73
74 var mts []*MergeTrain
75 resp, err := s.client.Do(req, &mts)
76 if err != nil {
77 return nil, resp, err
78 }
79
80 return mts, resp, nil
81 }
82
83
84
85
86
87
88 func (s *MergeTrainsService) ListMergeRequestInMergeTrain(pid interface{}, targetBranch string, opts *ListMergeTrainsOptions, options ...RequestOptionFunc) ([]*MergeTrain, *Response, error) {
89 project, err := parseID(pid)
90 if err != nil {
91 return nil, nil, err
92 }
93 u := fmt.Sprintf("projects/%s/merge_trains/%s", PathEscape(project), targetBranch)
94
95 req, err := s.client.NewRequest(http.MethodGet, u, opts, options)
96 if err != nil {
97 return nil, nil, err
98 }
99
100 var mts []*MergeTrain
101 resp, err := s.client.Do(req, &mts)
102 if err != nil {
103 return nil, resp, err
104 }
105
106 return mts, resp, nil
107 }
108
109
110
111
112
113
114 func (s *MergeTrainsService) GetMergeRequestOnAMergeTrain(pid interface{}, mergeRequest int, options ...RequestOptionFunc) (*MergeTrain, *Response, error) {
115 project, err := parseID(pid)
116 if err != nil {
117 return nil, nil, err
118 }
119 u := fmt.Sprintf("projects/%s/merge_trains/merge_requests/%d", PathEscape(project), mergeRequest)
120
121 req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
122 if err != nil {
123 return nil, nil, err
124 }
125
126 mt := new(MergeTrain)
127 resp, err := s.client.Do(req, mt)
128 if err != nil {
129 return nil, resp, err
130 }
131
132 return mt, resp, nil
133 }
134
135
136
137
138
139
140 type AddMergeRequestToMergeTrainOptions struct {
141 WhenPipelineSucceeds *bool `url:"when_pipeline_succeeds,omitempty" json:"when_pipeline_succeeds,omitempty"`
142 SHA *string `url:"sha,omitempty" json:"sha,omitempty"`
143 Squash *bool `url:"squash,omitempty" json:"squash,omitempty"`
144 }
145
146
147
148
149
150
151 func (s *MergeTrainsService) AddMergeRequestToMergeTrain(pid interface{}, mergeRequest int, opts *AddMergeRequestToMergeTrainOptions, options ...RequestOptionFunc) ([]*MergeTrain, *Response, error) {
152 project, err := parseID(pid)
153 if err != nil {
154 return nil, nil, err
155 }
156 u := fmt.Sprintf("projects/%s/merge_trains/merge_requests/%d", PathEscape(project), mergeRequest)
157
158 req, err := s.client.NewRequest(http.MethodPost, u, opts, options)
159 if err != nil {
160 return nil, nil, err
161 }
162
163 var mts []*MergeTrain
164 resp, err := s.client.Do(req, &mts)
165 if err != nil {
166 return nil, resp, err
167 }
168
169 return mts, resp, nil
170 }
171
View as plain text