gitlab-faraday 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/lib/gitlab/api.rb +16 -0
  3. data/lib/gitlab/client/access_requests.rb +103 -0
  4. data/lib/gitlab/client/application_settings.rb +172 -0
  5. data/lib/gitlab/client/avatar.rb +21 -0
  6. data/lib/gitlab/client/award_emojis.rb +137 -0
  7. data/lib/gitlab/client/boards.rb +146 -0
  8. data/lib/gitlab/client/branches.rb +135 -0
  9. data/lib/gitlab/client/broadcast_messages.rb +75 -0
  10. data/lib/gitlab/client/build_variables.rb +135 -0
  11. data/lib/gitlab/client/builds.rb +108 -0
  12. data/lib/gitlab/client/commits.rb +216 -0
  13. data/lib/gitlab/client/container_registry.rb +90 -0
  14. data/lib/gitlab/client/deployments.rb +34 -0
  15. data/lib/gitlab/client/environments.rb +89 -0
  16. data/lib/gitlab/client/epic_issues.rb +23 -0
  17. data/lib/gitlab/client/epics.rb +73 -0
  18. data/lib/gitlab/client/events.rb +60 -0
  19. data/lib/gitlab/client/features.rb +48 -0
  20. data/lib/gitlab/client/group_badges.rb +88 -0
  21. data/lib/gitlab/client/group_boards.rb +141 -0
  22. data/lib/gitlab/client/group_labels.rb +88 -0
  23. data/lib/gitlab/client/group_milestones.rb +94 -0
  24. data/lib/gitlab/client/groups.rb +526 -0
  25. data/lib/gitlab/client/issue_links.rb +48 -0
  26. data/lib/gitlab/client/issues.rb +242 -0
  27. data/lib/gitlab/client/jobs.rb +250 -0
  28. data/lib/gitlab/client/keys.rb +29 -0
  29. data/lib/gitlab/client/labels.rb +88 -0
  30. data/lib/gitlab/client/lint.rb +19 -0
  31. data/lib/gitlab/client/markdown.rb +23 -0
  32. data/lib/gitlab/client/merge_request_approvals.rb +265 -0
  33. data/lib/gitlab/client/merge_requests.rb +415 -0
  34. data/lib/gitlab/client/merge_trains.rb +55 -0
  35. data/lib/gitlab/client/milestones.rb +106 -0
  36. data/lib/gitlab/client/namespaces.rb +22 -0
  37. data/lib/gitlab/client/notes.rb +313 -0
  38. data/lib/gitlab/client/packages.rb +95 -0
  39. data/lib/gitlab/client/pipeline_schedules.rb +159 -0
  40. data/lib/gitlab/client/pipeline_triggers.rb +103 -0
  41. data/lib/gitlab/client/pipelines.rb +130 -0
  42. data/lib/gitlab/client/project_badges.rb +85 -0
  43. data/lib/gitlab/client/project_clusters.rb +83 -0
  44. data/lib/gitlab/client/project_exports.rb +54 -0
  45. data/lib/gitlab/client/project_release_links.rb +76 -0
  46. data/lib/gitlab/client/project_releases.rb +90 -0
  47. data/lib/gitlab/client/projects.rb +792 -0
  48. data/lib/gitlab/client/protected_tags.rb +59 -0
  49. data/lib/gitlab/client/remote_mirrors.rb +90 -0
  50. data/lib/gitlab/client/repositories.rb +130 -0
  51. data/lib/gitlab/client/repository_files.rb +131 -0
  52. data/lib/gitlab/client/repository_submodules.rb +27 -0
  53. data/lib/gitlab/client/resource_label_events.rb +82 -0
  54. data/lib/gitlab/client/resource_state_events.rb +57 -0
  55. data/lib/gitlab/client/runners.rb +278 -0
  56. data/lib/gitlab/client/search.rb +66 -0
  57. data/lib/gitlab/client/services.rb +53 -0
  58. data/lib/gitlab/client/sidekiq.rb +39 -0
  59. data/lib/gitlab/client/snippets.rb +95 -0
  60. data/lib/gitlab/client/system_hooks.rb +64 -0
  61. data/lib/gitlab/client/tags.rb +97 -0
  62. data/lib/gitlab/client/templates.rb +100 -0
  63. data/lib/gitlab/client/todos.rb +46 -0
  64. data/lib/gitlab/client/user_snippets.rb +114 -0
  65. data/lib/gitlab/client/users.rb +521 -0
  66. data/lib/gitlab/client/versions.rb +18 -0
  67. data/lib/gitlab/client/wikis.rb +79 -0
  68. data/lib/gitlab/client.rb +96 -0
  69. data/lib/gitlab/configuration.rb +36 -0
  70. data/lib/gitlab/error.rb +114 -0
  71. data/lib/gitlab/file_response.rb +43 -0
  72. data/lib/gitlab/headers/page_links.rb +32 -0
  73. data/lib/gitlab/headers/total.rb +24 -0
  74. data/lib/gitlab/objectified_hash.rb +44 -0
  75. data/lib/gitlab/paginated_response.rb +114 -0
  76. data/lib/gitlab/request.rb +144 -0
  77. data/lib/gitlab/version.rb +5 -0
  78. data/lib/gitlab.rb +36 -0
  79. metadata +156 -0
@@ -0,0 +1,265 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Gitlab::Client
4
+ # Defines methods related to MR Approvals.
5
+ # @see https://docs.gitlab.com/ee/api/merge_request_approvals.html
6
+ module MergeRequestApprovals
7
+ # Gets MR Approval Configuration for a project
8
+ #
9
+ # @example
10
+ # Gitlab.project_merge_request_approvals(1)
11
+ #
12
+ # @param [Integer] project The ID of a project.
13
+ # @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project
14
+ def project_merge_request_approvals(project)
15
+ get("/projects/#{url_encode project}/approvals")
16
+ end
17
+
18
+ # Change MR Approval Configuration for a project
19
+ #
20
+ # @example
21
+ # Gitlab.edit_project_merge_request_approvals(1, {approvals_before_merge: 3})
22
+ # Gitlab.edit_project_merge_request_approvals(1, {approvals_before_merge: 3, reset_approvals_on_push: true})
23
+ # Gitlab.edit_project_merge_request_approvals(1, {approvals_before_merge: 3, disable_overriding_approvers_per_merge_request: false})
24
+ #
25
+ # @param [Integer] project(required) The ID of a project.
26
+ # @option options [Integer] :approvals_before_merge(optional) How many approvals are required before an MR can be merged
27
+ # @option options [Boolean] :reset_approvals_on_push(optional) Reset approvals on a new push
28
+ # @option options [Boolean] :disable_overriding_approvers_per_merge_request(optional) Allow/Disallow overriding approvers per MR
29
+ # @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project
30
+ def edit_project_merge_request_approvals(project, options = {})
31
+ post("/projects/#{url_encode project}/approvals", body: options)
32
+ end
33
+
34
+ # Gets MR Approval Rules for a project
35
+ #
36
+ # @example
37
+ # Gitlab.project_merge_request_approval_rules(1)
38
+ #
39
+ # @param [Integer] project The ID of a project.
40
+ # @return [Gitlab::ObjectifiedHash] MR approval rules for the project
41
+ def project_merge_request_approval_rules(project)
42
+ get("/projects/#{url_encode project}/approval_rules")
43
+ end
44
+
45
+ # Create MR Approval Rule for a project
46
+ #
47
+ # @example
48
+ # Gitlab.create_project_merge_request_approval_rule(1, {name: "security", approvals_required: 1})
49
+ #
50
+ # @param [Integer] project(required) The ID of a project.
51
+ # @option options [String] :name(required) The name of the approval rule
52
+ # @option options [Integer] :approvals_required(required) The number of required approvals for this rule
53
+ # @option options [Array] :user_ids(optional) The ids of users as approvers
54
+ # @option options [Array] :group_ids(optional) The ids of groups as approvers
55
+ # @option options [Array] :protected_branch_ids(optional) The ids of protected branches to scope the rule by
56
+ # @return [Gitlab::ObjectifiedHash] New MR approval rule
57
+ def create_project_merge_request_approval_rule(project, options = {})
58
+ post("/projects/#{url_encode project}/approval_rules", body: options)
59
+ end
60
+
61
+ # Update MR Approval Rule for a project
62
+ #
63
+ # @example
64
+ # Gitlab.update_project_merge_request_approval_rule(1, {name: "security", approvals_required: 2})
65
+ #
66
+ # @param [Integer] project(required) The ID of a project.
67
+ # @param [Integer] approval_rule_id(required) The ID of a project Approval Rule
68
+ # @option options [String] :name(required) The name of the approval rule
69
+ # @option options [Integer] :approvals_required(required) The number of required approvals for this rule
70
+ # @option options [Array] :user_ids(optional) The ids of users as approvers
71
+ # @option options [Array] :group_ids(optional) The ids of groups as approvers
72
+ # @option options [Array] :protected_branch_ids(optional) The ids of protected branches to scope the rule by
73
+ # @return [Gitlab::ObjectifiedHash] Updated MR approval rule
74
+ def update_project_merge_request_approval_rule(project, approval_rule_id, options = {})
75
+ put("/projects/#{url_encode project}/approval_rules/#{approval_rule_id}", body: options)
76
+ end
77
+
78
+ # Delete MR Approval Rule for a project
79
+ #
80
+ # @example
81
+ # Gitlab.delete_project_merge_request_approval_rule(1, 1)
82
+ #
83
+ # @param [Integer] project(required) The ID of a project.
84
+ # @param [Integer] approval_rule_id(required) The ID of a approval rule
85
+ # @return [void] This API call returns an empty response body
86
+ def delete_project_merge_request_approval_rule(project, approval_rule_id)
87
+ delete("/projects/#{url_encode project}/approval_rules/#{approval_rule_id}")
88
+ end
89
+
90
+ # Change allowed approvers and approver groups for a project
91
+ # @deprecated Since Gitlab 13.12 /approvers endpoints are removed!!!
92
+ # See Gitlab.create_project_merge_request_approval_rule
93
+ #
94
+ # @example
95
+ # Gitlab.edit_project_approvers(1, {approver_ids: [5], approver_groups: [1]})
96
+ #
97
+ # @param [Integer] project(required) The ID of a project.
98
+ # @option options [Array] :approver_ids(required, nil if none) An array of User IDs that can approve MRs
99
+ # @option options [Array] :approver_group_ids(required, nil if none) An array of Group IDs whose members can approve MRs
100
+ # @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project
101
+ def edit_project_approvers(project, options = {})
102
+ put("/projects/#{url_encode project}/approvers", body: options)
103
+ end
104
+
105
+ # Get Configuration for approvals on a specific Merge Request.
106
+ #
107
+ # @example
108
+ # Gitlab.merge_request_approvals(1, 5)
109
+ #
110
+ # @param [Integer] project(required) The ID of a project.
111
+ # @param [Integer] merge_request(required) The IID of a merge_request.
112
+ # @return [Gitlab::ObjectifiedHash] MR approval configuration information about the merge request
113
+ def merge_request_approvals(project, merge_request)
114
+ get("/projects/#{url_encode project}/merge_requests/#{merge_request}/approvals")
115
+ end
116
+
117
+ # Change configuration for approvals on a specific merge request.
118
+ #
119
+ # @example
120
+ # Gitlab.edit_merge_request_approvals(1, 5, approvals_required: 2)
121
+ #
122
+ # @param [Integer] project(required) The ID of a project.
123
+ # @param [Integer] merge_request(required) The IID of a merge_request.
124
+ # @option options [Integer] :approvals_required(required) Approvals required before MR can be merged
125
+ # @return [Gitlab::ObjectifiedHash] Updated MR approval configuration information about the merge request
126
+ def edit_merge_request_approvals(project, merge_request, options = {})
127
+ post("/projects/#{url_encode project}/merge_requests/#{merge_request}/approvals", body: options)
128
+ end
129
+
130
+ # Change allowed approvers and approver groups for a merge request
131
+ # @deprecated Since Gitlab 13.12 /approvers endpoints are removed!!!
132
+ # See Gitlab.create_merge_request_level_rule
133
+ #
134
+ # @example
135
+ # Gitlab.edit_merge_request_approvers(1, 5, {approver_ids: [5], approver_groups: [1]})
136
+ #
137
+ # @param [Integer] project(required) The ID of a project.
138
+ # @param [Integer] merge_request(required) The IID of a merge_request.
139
+ # @option options [Array] :approver_ids(required, nil if none) An array of User IDs that can approve MRs
140
+ # @option options [Array] :approver_group_ids(required, nil if none) An array of Group IDs whose members can approve MRs
141
+ # @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project
142
+ def edit_merge_request_approvers(project, merge_request, options = {})
143
+ put("/projects/#{url_encode project}/merge_requests/#{merge_request}/approvers", body: options)
144
+ end
145
+
146
+ # Create merge request level rule
147
+ #
148
+ # @example
149
+ # Gitlab.create_merge_request_level_rule(1, 2, {
150
+ # name: "devs",
151
+ # approvals_required: 2,
152
+ # approval_project_rule_id: 99,
153
+ # user_ids: [3, 4],
154
+ # group_ids: [5, 6],
155
+ # })
156
+ #
157
+ # Important: When approval_project_rule_id is set, the name, users and groups of project-level rule are copied.
158
+ # The approvals_required specified is used.
159
+ #
160
+ # @param [Integer] project(required) The ID of a project.
161
+ # @param [Integer] merge_request(required) The IID of a merge request.
162
+ # @option options [String] :name(required) The name of the approval rule
163
+ # @option options [Integer] :approvals_required(required) The number of required approvals for this rule
164
+ # @option options [Integer] :approval_project_rule_id(optional) The ID of a project-level approval rule
165
+ # @option options [Array] :user_ids(optional) The ids of users as approvers
166
+ # @option options [Array] :group_ids(optional) The ids of groups as approvers
167
+ # @return [Gitlab::ObjectifiedHash] New MR level approval rule
168
+ def create_merge_request_level_rule(project, merge_request, options = {})
169
+ post("/projects/#{url_encode project}/merge_requests/#{merge_request}/approval_rules", body: options)
170
+ end
171
+
172
+ # Get merge request level rule
173
+ #
174
+ # @example
175
+ # Gitlab.merge_request_level_rule(1, 2)
176
+ #
177
+ # @param [Integer] project(required) The ID of a project.
178
+ # @param [Integer] merge_request(required) The IID of a merge request.
179
+ # @return [Gitlab::ObjectifiedHash] New MR level approval rule
180
+ def merge_request_level_rule(project, merge_request)
181
+ get("/projects/#{url_encode project}/merge_requests/#{merge_request}/approval_rules")
182
+ end
183
+
184
+ # Update merge request level rule
185
+ #
186
+ # @example
187
+ # Gitlab.update_merge_request_level_rule(1, 2, 69, {
188
+ # name: "devs",
189
+ # approvals_required: 2,
190
+ # user_ids: [3, 4],
191
+ # group_ids: [5, 6],
192
+ # })
193
+ #
194
+ # Important: Approvers and groups not in the users/groups parameters are removed
195
+ # Important: Updating a report_approver or code_owner rule is not allowed.
196
+ # These are system generated rules.
197
+ #
198
+ # @param [Integer] project(required) The ID of a project.
199
+ # @param [Integer] merge_request(required) The IID of a merge request.
200
+ # @param [Integer] appr_rule_id(required) The ID of a approval rule
201
+ # @option options [String] :name(required) The name of the approval rule
202
+ # @option options [Integer] :approvals_required(required) The number of required approvals for this rule
203
+ # @option options [Array] :user_ids(optional) The ids of users as approvers
204
+ # @option options [Array] :group_ids(optional) The ids of groups as approvers
205
+ # @return [Gitlab::ObjectifiedHash] Updated MR level approval rule
206
+ def update_merge_request_level_rule(project, merge_request, appr_rule_id, options = {})
207
+ put("/projects/#{url_encode project}/merge_requests/#{merge_request}/approval_rules/#{appr_rule_id}", body: options)
208
+ end
209
+
210
+ # Delete merge request level rule
211
+ #
212
+ # @example
213
+ # Gitlab.delete_merge_request_level_rule(1, 2, 69)
214
+ #
215
+ # Important: Deleting a report_approver or code_owner rule is not allowed.
216
+ # These are system generated rules.
217
+ #
218
+ # @param [Integer] project(required) The ID of a project.
219
+ # @param [Integer] merge_request(required) The IID of a merge request.
220
+ # @param [Integer] appr_rule_id(required) The ID of a approval rule
221
+ # @return [void] This API call returns an empty response body
222
+ def delete_merge_request_level_rule(project, merge_request, appr_rule_id)
223
+ delete("/projects/#{url_encode project}/merge_requests/#{merge_request}/approval_rules/#{appr_rule_id}")
224
+ end
225
+
226
+ # Approve a merge request
227
+ #
228
+ # @example
229
+ # Gitlab.approve_merge_request(1, 5)
230
+ # Gitlab.approve_merge_request(1, 5, sha: 'fe678da')
231
+ #
232
+ # @param [Integer] project(required) The ID of a project.
233
+ # @param [Integer] merge_request(required) The IID of a merge request.
234
+ # @option options [String] :sha(optional) The HEAD of the MR
235
+ # @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project
236
+ def approve_merge_request(project, merge_request, options = {})
237
+ post("/projects/#{url_encode project}/merge_requests/#{merge_request}/approve", body: options)
238
+ end
239
+
240
+ # Unapprove a merge request
241
+ #
242
+ # @example
243
+ # Gitlab.unapprove_merge_request(1, 5)
244
+ #
245
+ # @param [Integer] project(required) The ID of a project.
246
+ # @param [Integer] merge_request(required) The IID of a merge request.
247
+ # @option options [String] :sudo(optional) The username of the user you want to remove the approval for
248
+ # @return [void] This API call returns an empty response body.
249
+ def unapprove_merge_request(project, merge_request, options = {})
250
+ post("/projects/#{url_encode project}/merge_requests/#{merge_request}/unapprove", body: options)
251
+ end
252
+
253
+ # Get the approval state of merge requests
254
+ #
255
+ # @example
256
+ # Gitlab.merge_request_approval_state(5, 36)
257
+ #
258
+ # @param [Integer, String] project The ID or name of a project.
259
+ # @param [Integer] id The ID of a merge request.
260
+ # @return [Array<Gitlab::ObjectifiedHash>]
261
+ def merge_request_approval_state(project, id)
262
+ get("/projects/#{url_encode project}/merge_requests/#{id}/approval_state")
263
+ end
264
+ end
265
+ end
@@ -0,0 +1,415 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Gitlab::Client
4
+ # Defines methods related to merge requests.
5
+ # @see https://docs.gitlab.com/ce/api/merge_requests.html
6
+ module MergeRequests
7
+ # Gets a list of all of the merge requests the authenticated user has access to.
8
+ #
9
+ # @example
10
+ # Gitlab.user_merge_requests
11
+ # Gitlab.user_merge_requests(state: :opened, scope: :all)
12
+ #
13
+ # @param [Hash] options A customizable set of options.
14
+ # @return [Array<Gitlab::ObjectifiedHash>]
15
+ def user_merge_requests(options = {})
16
+ get('/merge_requests', query: options)
17
+ end
18
+
19
+ # Gets a list of project merge requests.
20
+ #
21
+ # @example
22
+ # Gitlab.merge_requests(5)
23
+ # Gitlab.merge_requests(5, { per_page: 40 })
24
+ #
25
+ # @param [Integer, String] project The ID or name of a project.
26
+ # @param [Hash] options A customizable set of options.
27
+ # @option options [Integer] :page The page number.
28
+ # @option options [Integer] :per_page The number of results per page.
29
+ # @return [Array<Gitlab::ObjectifiedHash>]
30
+ def merge_requests(project, options = {})
31
+ get("/projects/#{url_encode project}/merge_requests", query: options)
32
+ end
33
+
34
+ # Gets a single merge request.
35
+ #
36
+ # @example
37
+ # Gitlab.merge_request(5, 36)
38
+ # Gitlab.merge_request(5, 36, { include_diverged_commits_count: true })
39
+ #
40
+ # @param [Integer, String] project The ID or name of a project.
41
+ # @param [Integer] id The ID of a merge request.
42
+ # @option options [Boolean] :render_html If true response includes rendered HTML for title and description.
43
+ # @option options [Boolean] :include_diverged_commits_count If true response includes the commits behind the target branch.
44
+ # @option options [Boolean] :include_rebase_in_progress If true response includes whether a rebase operation is in progress.
45
+ # @return <Gitlab::ObjectifiedHash]
46
+ def merge_request(project, id, options = {})
47
+ get("/projects/#{url_encode project}/merge_requests/#{id}", query: options)
48
+ end
49
+
50
+ # Gets a list of merge request pipelines.
51
+ #
52
+ # @example
53
+ # Gitlab.merge_request_pipelines(5, 36)
54
+ #
55
+ # @param [Integer, String] project The ID or name of a project.
56
+ # @param [Integer] id The ID of a merge request.
57
+ # @return [Array<Gitlab::ObjectifiedHash>]
58
+ def merge_request_pipelines(project, id)
59
+ get("/projects/#{url_encode project}/merge_requests/#{id}/pipelines")
60
+ end
61
+
62
+ # Shows information about the merge request dependencies that must be resolved before merging.
63
+ #
64
+ # @example
65
+ # Gitlab.merge_request_dependencies(5, 36)
66
+ #
67
+ # @param [Integer, String] project The ID or name of a project.
68
+ # @param [Integer] id The ID of a merge request.
69
+ # @return [Array<Gitlab::ObjectifiedHash>]
70
+ def merge_request_dependencies(project, id)
71
+ get("/projects/#{url_encode project}/merge_requests/#{id}/blocks")
72
+ end
73
+
74
+ # Create a new pipeline for a merge request.
75
+ # A pipeline created via this endpoint doesnt run a regular branch/tag pipeline.
76
+ # It requires .gitlab-ci.yml to be configured with only: [merge_requests] to create jobs.
77
+ #
78
+ # The new pipeline can be:
79
+ #
80
+ # A detached merge request pipeline.
81
+ # A pipeline for merged results if the project setting is enabled.
82
+ #
83
+ # @example
84
+ # Gitlab.create_merge_request_pipeline(5, 36)
85
+ #
86
+ # @param [Integer, String] project The ID or name of a project.
87
+ # @param [Integer] iid The internal ID of a merge request.
88
+ # @return [Gitlab::ObjectifiedHash]
89
+ def create_merge_request_pipeline(project, iid)
90
+ post("/projects/#{url_encode project}/merge_requests/#{iid}/pipelines")
91
+ end
92
+
93
+ # Get a list of merge request participants.
94
+ #
95
+ # @example
96
+ # Gitlab.merge_request_participants(5, 36)
97
+ #
98
+ # @param [Integer, String] project The ID or name of a project.
99
+ # @param [Integer] id The ID of a merge request.
100
+ # @return [Array<Gitlab::ObjectifiedHash>]
101
+ def merge_request_participants(project, id)
102
+ get("/projects/#{url_encode project}/merge_requests/#{id}/participants")
103
+ end
104
+
105
+ # Creates a merge request.
106
+ #
107
+ # @example
108
+ # Gitlab.create_merge_request(5, 'New merge request',
109
+ # { source_branch: 'source_branch', target_branch: 'target_branch' })
110
+ # Gitlab.create_merge_request(5, 'New merge request',
111
+ # { source_branch: 'source_branch', target_branch: 'target_branch', assignee_id: 42 })
112
+ #
113
+ # @param [Integer, String] project The ID or name of a project.
114
+ # @param [String] title The title of a merge request.
115
+ # @param [Hash] options A customizable set of options.
116
+ # @option options [String] :source_branch (required) The source branch name.
117
+ # @option options [String] :target_branch (required) The target branch name.
118
+ # @option options [Integer] :assignee_id (optional) The ID of a user to assign merge request.
119
+ # @option options [Array<Integer>] :assignee_ids (optional) The ID of the user(s) to assign the MR to. Set to 0 or provide an empty value to unassign all assignees.
120
+ # @option options [String] :description (optional) Description of MR. Limited to 1,048,576 characters.
121
+ # @option options [Integer] :target_project_id (optional) The target project ID.
122
+ # @option options [String] :labels (optional) Labels as a comma-separated list.
123
+ # @option options [Integer] :milestone_id (optional) The global ID of a milestone
124
+ # @option options [Boolean] :remove_source_branch (optional) Flag indicating if a merge request should remove the source branch when merging
125
+ # @option options [Boolean] :allow_collaboration (optional) Allow commits from members who can merge to the target branch
126
+ # @option options [Boolean] :squash (optional) Squash commits into a single commit when merging
127
+ # @return [Gitlab::ObjectifiedHash] Information about created merge request.
128
+ def create_merge_request(project, title, options = {})
129
+ body = { title: title }.merge(options)
130
+ post("/projects/#{url_encode project}/merge_requests", body: body)
131
+ end
132
+
133
+ # Updates a merge request.
134
+ #
135
+ # @example
136
+ # Gitlab.update_merge_request(5, 42, { title: 'New title' })
137
+ #
138
+ # @param [Integer, String] project The ID or name of a project.
139
+ # @param [Integer] id The ID of a merge request.
140
+ # @param [Hash] options A customizable set of options.
141
+ # @option options [String] :title The title of a merge request.
142
+ # @option options [String] :source_branch The source branch name.
143
+ # @option options [String] :target_branch The target branch name.
144
+ # @option options [Integer] :assignee_id The ID of a user to assign merge request.
145
+ # @option options [String] :state_event New state (close|reopen|merge).
146
+ # @return [Gitlab::ObjectifiedHash] Information about updated merge request.
147
+ def update_merge_request(project, id, options = {})
148
+ put("/projects/#{url_encode project}/merge_requests/#{id}", body: options)
149
+ end
150
+
151
+ # Accepts a merge request.
152
+ #
153
+ # @example
154
+ # Gitlab.accept_merge_request(5, 42, { merge_commit_message: 'Nice!' })
155
+ #
156
+ # @param [Integer, String] project The ID or name of a project.
157
+ # @param [Integer] id The ID of a merge request.
158
+ # @param [Hash] options A customizable set of options.
159
+ # @option options [String] :merge_commit_message(optional) Custom merge commit message
160
+ # @option options [String] :squash_commit_message(optional) Custom squash commit message
161
+ # @option options [Boolean] :squash(optional) if true the commits will be squashed into a single commit on merge
162
+ # @option options [Boolean] :should_remove_source_branch(optional) if true removes the source branch
163
+ # @option options [Boolean] :merge_when_pipeline_succeeds(optional) if true the MR is merged when the pipeline succeeds
164
+ # @option options [String] :sha(optional) if present, then this SHA must match the HEAD of the source branch, otherwise the merge will fail
165
+ # @return [Gitlab::ObjectifiedHash] Information about updated merge request.
166
+ def accept_merge_request(project, id, options = {})
167
+ put("/projects/#{url_encode project}/merge_requests/#{id}/merge", body: options)
168
+ end
169
+
170
+ # Gets the changes of a merge request.
171
+ #
172
+ # @example
173
+ # Gitlab.merge_request_changes(5, 1)
174
+ #
175
+ # @param [Integer, String] project The ID or name of a project.
176
+ # @param [Integer] id The ID of a merge request.
177
+ # @return [Gitlab::ObjectifiedHash] The merge request's changes.
178
+ def merge_request_changes(project, id)
179
+ get("/projects/#{url_encode project}/merge_requests/#{id}/changes")
180
+ end
181
+
182
+ # Gets the commits of a merge request.
183
+ #
184
+ # @example
185
+ # Gitlab.merge_request_commits(5, 1)
186
+ #
187
+ # @param [Integer, String] project The ID or name of a project.
188
+ # @param [Integer] id The ID of a merge request.
189
+ # @return [Array<Gitlab::ObjectifiedHash>] The merge request's commits.
190
+ def merge_request_commits(project, id)
191
+ get("/projects/#{url_encode project}/merge_requests/#{id}/commits")
192
+ end
193
+
194
+ # List issues that will close on merge
195
+ #
196
+ # @example
197
+ # Gitlab.merge_request_closes_issues(5, 1)
198
+ #
199
+ # @param [Integer] project The ID of a project
200
+ # @param [Integer] iid The internal ID of a merge request
201
+ def merge_request_closes_issues(project_id, merge_request_iid)
202
+ get("/projects/#{url_encode project_id}/merge_requests/#{merge_request_iid}/closes_issues")
203
+ end
204
+
205
+ # Subscribes to a merge request.
206
+ #
207
+ # @example
208
+ # Gitlab.subscribe_to_merge_request(5, 1)
209
+ # Gitlab.subscribe_to_merge_request('gitlab', 1)
210
+ #
211
+ # @param [Integer, String] project The ID or name of a project.
212
+ # @param [Integer] id The ID of a merge request.
213
+ # @return [Gitlab::ObjectifiedHash] Information about subscribed merge request.
214
+ def subscribe_to_merge_request(project, id)
215
+ post("/projects/#{url_encode project}/merge_requests/#{id}/subscribe")
216
+ end
217
+
218
+ # Unsubscribes from a merge request.
219
+ #
220
+ # @example
221
+ # Gitlab.unsubscribe_from_merge_request(5, 1)
222
+ # Gitlab.unsubscribe_from_merge_request('gitlab', 1)
223
+ #
224
+ # @param [Integer, String] project The ID or name of a project.
225
+ # @param [Integer] id The ID of a merge request.
226
+ # @return [Gitlab::ObjectifiedHash] Information about unsubscribed merge request.
227
+ def unsubscribe_from_merge_request(project, id)
228
+ post("/projects/#{url_encode project}/merge_requests/#{id}/unsubscribe")
229
+ end
230
+
231
+ # List project merge request discussions
232
+ #
233
+ # @example
234
+ # Gitlab.merge_request_discussions(5, 1)
235
+ # Gitlab.merge_request_discussions('gitlab', 1)
236
+ # @param [Integer, String] project The ID or name of a project.
237
+ # @param [Integer] id The ID of a merge request.
238
+ # @option options [Integer] :page The page number.
239
+ # @option options [Integer] :per_page The number of results per page.
240
+ # @return [Gitlab::ObjectifiedHash] List of the merge request discussions.
241
+ def merge_request_discussions(project, merge_request_id, options = {})
242
+ get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions", query: options)
243
+ end
244
+
245
+ # Get single merge request discussion
246
+ #
247
+ # @example
248
+ # Gitlab.merge_request_discussion(5, 1, 1)
249
+ # Gitlab.merge_request_discussion('gitlab', 1, 1)
250
+ # @param [Integer, String] project The ID or name of a project.
251
+ # @param [Integer] id The ID of a merge request.
252
+ # @param [Integer] discussion_id The ID of a discussion.
253
+ # @return [Gitlab::ObjectifiedHash] The merge request discussion.
254
+ def merge_request_discussion(project, merge_request_id, discussion_id)
255
+ get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions/#{discussion_id}")
256
+ end
257
+
258
+ # Create new merge request discussion
259
+ #
260
+ # @example
261
+ # Gitlab.create_merge_request_discussion(5, 1, body: 'discuss')
262
+ # Gitlab.create_merge_request_discussion('gitlab', 1, body: 'discuss')
263
+ # @param [Integer, String] project The ID or name of a project.
264
+ # @param [Integer] id The ID of a merge request.
265
+ # @param [Hash] options A customizable set of options.
266
+ # * :body (String) The content of a discussion
267
+ # * :created_at (String) Date time string, ISO 8601 formatted, e.g. 2016-03-11T03:45:40Z
268
+ # * :position (Hash) Position when creating a diff note
269
+ # * :base_sha (String) Base commit SHA in the source branch
270
+ # * :start_sha (String) SHA referencing commit in target branch
271
+ # * :head_sha (String) SHA referencing HEAD of this merge request
272
+ # * :position_type (String) Type of the position reference', allowed values: 'text' or 'image'
273
+ # * :new_path (String) File path after change
274
+ # * :new_line (Integer) Line number after change (for 'text' diff notes)
275
+ # * :old_path (String) File path before change
276
+ # * :old_line (Integer) Line number before change (for 'text' diff notes)
277
+ # * :width (Integer) Width of the image (for 'image' diff notes)
278
+ # * :height (Integer) Height of the image (for 'image' diff notes)
279
+ # * :x (Integer) X coordinate (for 'image' diff notes)
280
+ # * :y (Integer) Y coordinate (for 'image' diff notes)
281
+ # @return [Gitlab::ObjectifiedHash] The created merge request discussion.
282
+ def create_merge_request_discussion(project, merge_request_id, options = {})
283
+ post("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions", body: options)
284
+ end
285
+
286
+ # Resolve a merge request discussion
287
+ #
288
+ # @example
289
+ # Gitlab.resolve_merge_request_discussion(5, 1, 1, true)
290
+ # Gitlab.resolve_merge_request_discussion('gitlab', 1, 1, false)
291
+ # @param [Integer, String] project The ID or name of a project.
292
+ # @param [Integer] id The ID of a merge request.
293
+ # @param [Integer] discussion_id The ID of a discussion.
294
+ # @param [Hash] options A customizable set of options.
295
+ # @option options [Boolean] :resolved Resolve/unresolve the discussion.
296
+ # @return [Gitlab::ObjectifiedHash] The merge request discussion.
297
+ def resolve_merge_request_discussion(project, merge_request_id, discussion_id, options)
298
+ put("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions/#{discussion_id}", body: options)
299
+ end
300
+
301
+ # Add note to existing merge request discussion
302
+ #
303
+ # @example
304
+ # Gitlab.create_merge_request_discussion_note(5, 1, 1, note_id: 1, body: 'note')
305
+ # Gitlab.create_merge_request_discussion_note('gitlab', 1, 1, note_id: 1, body: 'note')
306
+ # @param [Integer, String] project The ID or name of a project.
307
+ # @param [Integer] id The ID of a merge request.
308
+ # @param [Integer] discussion_id The ID of a discussion.
309
+ # @param [Hash] options A customizable set of options.
310
+ # @option options [Integer] :note_id The ID of a discussion note.
311
+ # @option options [String] :body The content of a discussion.
312
+ # @option options [String] :created_at Date time string, ISO 8601 formatted, e.g. 2016-03-11T03:45:40Z.
313
+ # @return [Gitlab::ObjectifiedHash] The merge request discussion note.
314
+ def create_merge_request_discussion_note(project, merge_request_id, discussion_id, options)
315
+ post("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions/#{discussion_id}/notes", body: options)
316
+ end
317
+
318
+ # Modify an existing merge request discussion note
319
+ #
320
+ # @example
321
+ # Gitlab.update_merge_request_discussion_note(5, 1, 1, 1, body: 'note')
322
+ # Gitlab.update_merge_request_discussion_note('gitlab', 1, 1, 1, body: 'note')
323
+ # @param [Integer, String] project The ID or name of a project.
324
+ # @param [Integer] id The ID of a merge request.
325
+ # @param [Integer] discussion_id The ID of a discussion.
326
+ # @param [Integer] note_id The ID of a discussion note.
327
+ # @param [Hash] options A customizable set of options.
328
+ # @option options [String] :body The content of a discussion.
329
+ # @option options [Boolean] :resolved Resolve/unresolve the note.
330
+ # @return [Gitlab::ObjectifiedHash] The merge request discussion note.
331
+ def update_merge_request_discussion_note(project, merge_request_id, discussion_id, note_id, options)
332
+ put("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions/#{discussion_id}/notes/#{note_id}", body: options)
333
+ end
334
+
335
+ # Delete a merge request discussion note
336
+ #
337
+ # @example
338
+ # Gitlab.delete_merge_request_discussion_note(5, 1, 1, 1)
339
+ # Gitlab.delete_merge_request_discussion_note('gitlab', 1, 1, 1)
340
+ # @param [Integer, String] project The ID or name of a project.
341
+ # @param [Integer] id The ID of a merge request.
342
+ # @param [Integer] discussion_id The ID of a discussion.
343
+ # @param [Integer] note_id The ID of a discussion note.
344
+ # @return [Gitlab::ObjectifiedHash] An empty response.
345
+ def delete_merge_request_discussion_note(project, merge_request_id, discussion_id, note_id)
346
+ delete("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions/#{discussion_id}/notes/#{note_id}")
347
+ end
348
+
349
+ # Delete a merge request
350
+ #
351
+ # @example
352
+ # Gitlab.delete_merge_request(5, 1)
353
+ # Gitlab.delete_merge_request('gitlab', 1)
354
+ # @param [Integer, String] project The ID or name of a project.
355
+ # @param [Integer] id The ID of a merge request.
356
+ # @return [Gitlab::ObjectifiedHash] An empty response.
357
+ def delete_merge_request(project, merge_request_id)
358
+ delete("/projects/#{url_encode project}/merge_requests/#{merge_request_id}")
359
+ end
360
+
361
+ # Gets a list of merge request diffs
362
+ #
363
+ # @example
364
+ # Gitlab.merge_request_diffs(5, 1)
365
+ # Gitlab.merge_request_diffs('gitlab', 1)
366
+ # @param [Integer, String] project The ID or name of a project.
367
+ # @param [Integer] id The ID of a merge request.
368
+ # @option options [Integer] :page The page number.
369
+ # @option options [Integer] :per_page The number of results per page.
370
+ # @option options [Boolean] :unidiff Present diffs in the unified diff format.
371
+ # @return [Gitlab::ObjectifiedHash] A list of the merge request diffs.
372
+ def merge_request_diffs(project, merge_request_id, options = {})
373
+ get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/diffs", query: options)
374
+ end
375
+
376
+ # Gets a list of merge request diff versions
377
+ #
378
+ # @example
379
+ # Gitlab.merge_request_versions(5, 1)
380
+ # Gitlab.merge_request_versions('gitlab', 1)
381
+ # @param [Integer, String] project The ID or name of a project.
382
+ # @param [Integer] id The ID of a merge request.
383
+ # @return [Gitlab::ObjectifiedHash] A list of the merge request versions.
384
+ def merge_request_diff_versions(project, merge_request_id)
385
+ get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/versions")
386
+ end
387
+
388
+ # Gets the diff a single merge request diff version\
389
+ #
390
+ # @example
391
+ # Gitlab.merge_request_diff_version(5, 1, 1)
392
+ # Gitlab.merge_request_diff_version('gitlab', 1, 1)
393
+ # @param [Integer, String] project The ID or name of a project.
394
+ # @param [Integer] id The ID of a merge request.
395
+ # @param [Integer] id The ID of a merge request diff version.
396
+ # @return [Gitlab::ObjectifiedHash] Record of the specific diff
397
+ def merge_request_diff_version(project, merge_request_id, version_id)
398
+ get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/versions/#{version_id}")
399
+ end
400
+
401
+ # Rebase a merge request.
402
+ #
403
+ # @example
404
+ # Gitlab.rebase_merge_request(5, 42, { skip_ci: true })
405
+ #
406
+ # @param [Integer, String] project The ID or name of a project.
407
+ # @param [Integer] id The ID of a merge request.
408
+ # @param [Hash] options A customizable set of options.
409
+ # @option options [String] :skip_ci Set to true to skip creating a CI pipeline
410
+ # @return [Gitlab::ObjectifiedHash] Rebase progress status
411
+ def rebase_merge_request(project, id, options = {})
412
+ put("/projects/#{url_encode project}/merge_requests/#{id}/rebase", body: options)
413
+ end
414
+ end
415
+ end