|
47 | 47 | ) |
48 | 48 | from .push_rules import ProjectPushRulesManager |
49 | 49 | from .releases import ProjectReleaseManager |
| 50 | +from .repositories import RepositoryMixin |
50 | 51 | from .runners import ProjectRunnerManager |
51 | 52 | from .services import ProjectServiceManager |
52 | 53 | from .snippets import ProjectSnippetManager |
@@ -100,7 +101,7 @@ class GroupProjectManager(ListMixin, RESTManager): |
100 | 101 | ) |
101 | 102 |
|
102 | 103 |
|
103 | | -class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RESTObject): |
| 104 | +class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RepositoryMixin, RESTObject): |
104 | 105 | _short_print_attr = "path" |
105 | 106 | _managers = ( |
106 | 107 | ("access_tokens", "ProjectAccessTokenManager"), |
@@ -154,187 +155,6 @@ class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RESTObject): |
154 | 155 | ("deploytokens", "ProjectDeployTokenManager"), |
155 | 156 | ) |
156 | 157 |
|
157 | | - @cli.register_custom_action("Project", ("submodule", "branch", "commit_sha")) |
158 | | - @exc.on_http_error(exc.GitlabUpdateError) |
159 | | - def update_submodule(self, submodule, branch, commit_sha, **kwargs): |
160 | | - """Update a project submodule |
161 | | -
|
162 | | - Args: |
163 | | - submodule (str): Full path to the submodule |
164 | | - branch (str): Name of the branch to commit into |
165 | | - commit_sha (str): Full commit SHA to update the submodule to |
166 | | - commit_message (str): Commit message. If no message is provided, a default one will be set (optional) |
167 | | -
|
168 | | - Raises: |
169 | | - GitlabAuthenticationError: If authentication is not correct |
170 | | - GitlabPutError: If the submodule could not be updated |
171 | | - """ |
172 | | - |
173 | | - submodule = submodule.replace("/", "%2F") # .replace('.', '%2E') |
174 | | - path = "/projects/%s/repository/submodules/%s" % (self.get_id(), submodule) |
175 | | - data = {"branch": branch, "commit_sha": commit_sha} |
176 | | - if "commit_message" in kwargs: |
177 | | - data["commit_message"] = kwargs["commit_message"] |
178 | | - return self.manager.gitlab.http_put(path, post_data=data) |
179 | | - |
180 | | - @cli.register_custom_action("Project", tuple(), ("path", "ref", "recursive")) |
181 | | - @exc.on_http_error(exc.GitlabGetError) |
182 | | - def repository_tree(self, path="", ref="", recursive=False, **kwargs): |
183 | | - """Return a list of files in the repository. |
184 | | -
|
185 | | - Args: |
186 | | - path (str): Path of the top folder (/ by default) |
187 | | - ref (str): Reference to a commit or branch |
188 | | - recursive (bool): Whether to get the tree recursively |
189 | | - all (bool): If True, return all the items, without pagination |
190 | | - per_page (int): Number of items to retrieve per request |
191 | | - page (int): ID of the page to return (starts with page 1) |
192 | | - as_list (bool): If set to False and no pagination option is |
193 | | - defined, return a generator instead of a list |
194 | | - **kwargs: Extra options to send to the server (e.g. sudo) |
195 | | -
|
196 | | - Raises: |
197 | | - GitlabAuthenticationError: If authentication is not correct |
198 | | - GitlabGetError: If the server failed to perform the request |
199 | | -
|
200 | | - Returns: |
201 | | - list: The representation of the tree |
202 | | - """ |
203 | | - gl_path = "/projects/%s/repository/tree" % self.get_id() |
204 | | - query_data = {"recursive": recursive} |
205 | | - if path: |
206 | | - query_data["path"] = path |
207 | | - if ref: |
208 | | - query_data["ref"] = ref |
209 | | - return self.manager.gitlab.http_list(gl_path, query_data=query_data, **kwargs) |
210 | | - |
211 | | - @cli.register_custom_action("Project", ("sha",)) |
212 | | - @exc.on_http_error(exc.GitlabGetError) |
213 | | - def repository_blob(self, sha, **kwargs): |
214 | | - """Return a file by blob SHA. |
215 | | -
|
216 | | - Args: |
217 | | - sha(str): ID of the blob |
218 | | - **kwargs: Extra options to send to the server (e.g. sudo) |
219 | | -
|
220 | | - Raises: |
221 | | - GitlabAuthenticationError: If authentication is not correct |
222 | | - GitlabGetError: If the server failed to perform the request |
223 | | -
|
224 | | - Returns: |
225 | | - dict: The blob content and metadata |
226 | | - """ |
227 | | - |
228 | | - path = "/projects/%s/repository/blobs/%s" % (self.get_id(), sha) |
229 | | - return self.manager.gitlab.http_get(path, **kwargs) |
230 | | - |
231 | | - @cli.register_custom_action("Project", ("sha",)) |
232 | | - @exc.on_http_error(exc.GitlabGetError) |
233 | | - def repository_raw_blob( |
234 | | - self, sha, streamed=False, action=None, chunk_size=1024, **kwargs |
235 | | - ): |
236 | | - """Return the raw file contents for a blob. |
237 | | -
|
238 | | - Args: |
239 | | - sha(str): ID of the blob |
240 | | - streamed (bool): If True the data will be processed by chunks of |
241 | | - `chunk_size` and each chunk is passed to `action` for |
242 | | - treatment |
243 | | - action (callable): Callable responsible of dealing with chunk of |
244 | | - data |
245 | | - chunk_size (int): Size of each chunk |
246 | | - **kwargs: Extra options to send to the server (e.g. sudo) |
247 | | -
|
248 | | - Raises: |
249 | | - GitlabAuthenticationError: If authentication is not correct |
250 | | - GitlabGetError: If the server failed to perform the request |
251 | | -
|
252 | | - Returns: |
253 | | - str: The blob content if streamed is False, None otherwise |
254 | | - """ |
255 | | - path = "/projects/%s/repository/blobs/%s/raw" % (self.get_id(), sha) |
256 | | - result = self.manager.gitlab.http_get( |
257 | | - path, streamed=streamed, raw=True, **kwargs |
258 | | - ) |
259 | | - return utils.response_content(result, streamed, action, chunk_size) |
260 | | - |
261 | | - @cli.register_custom_action("Project", ("from_", "to")) |
262 | | - @exc.on_http_error(exc.GitlabGetError) |
263 | | - def repository_compare(self, from_, to, **kwargs): |
264 | | - """Return a diff between two branches/commits. |
265 | | -
|
266 | | - Args: |
267 | | - from_(str): Source branch/SHA |
268 | | - to(str): Destination branch/SHA |
269 | | - **kwargs: Extra options to send to the server (e.g. sudo) |
270 | | -
|
271 | | - Raises: |
272 | | - GitlabAuthenticationError: If authentication is not correct |
273 | | - GitlabGetError: If the server failed to perform the request |
274 | | -
|
275 | | - Returns: |
276 | | - str: The diff |
277 | | - """ |
278 | | - path = "/projects/%s/repository/compare" % self.get_id() |
279 | | - query_data = {"from": from_, "to": to} |
280 | | - return self.manager.gitlab.http_get(path, query_data=query_data, **kwargs) |
281 | | - |
282 | | - @cli.register_custom_action("Project") |
283 | | - @exc.on_http_error(exc.GitlabGetError) |
284 | | - def repository_contributors(self, **kwargs): |
285 | | - """Return a list of contributors for the project. |
286 | | -
|
287 | | - Args: |
288 | | - all (bool): If True, return all the items, without pagination |
289 | | - per_page (int): Number of items to retrieve per request |
290 | | - page (int): ID of the page to return (starts with page 1) |
291 | | - as_list (bool): If set to False and no pagination option is |
292 | | - defined, return a generator instead of a list |
293 | | - **kwargs: Extra options to send to the server (e.g. sudo) |
294 | | -
|
295 | | - Raises: |
296 | | - GitlabAuthenticationError: If authentication is not correct |
297 | | - GitlabGetError: If the server failed to perform the request |
298 | | -
|
299 | | - Returns: |
300 | | - list: The contributors |
301 | | - """ |
302 | | - path = "/projects/%s/repository/contributors" % self.get_id() |
303 | | - return self.manager.gitlab.http_list(path, **kwargs) |
304 | | - |
305 | | - @cli.register_custom_action("Project", tuple(), ("sha",)) |
306 | | - @exc.on_http_error(exc.GitlabListError) |
307 | | - def repository_archive( |
308 | | - self, sha=None, streamed=False, action=None, chunk_size=1024, **kwargs |
309 | | - ): |
310 | | - """Return a tarball of the repository. |
311 | | -
|
312 | | - Args: |
313 | | - sha (str): ID of the commit (default branch by default) |
314 | | - streamed (bool): If True the data will be processed by chunks of |
315 | | - `chunk_size` and each chunk is passed to `action` for |
316 | | - treatment |
317 | | - action (callable): Callable responsible of dealing with chunk of |
318 | | - data |
319 | | - chunk_size (int): Size of each chunk |
320 | | - **kwargs: Extra options to send to the server (e.g. sudo) |
321 | | -
|
322 | | - Raises: |
323 | | - GitlabAuthenticationError: If authentication is not correct |
324 | | - GitlabListError: If the server failed to perform the request |
325 | | -
|
326 | | - Returns: |
327 | | - str: The binary data of the archive |
328 | | - """ |
329 | | - path = "/projects/%s/repository/archive" % self.get_id() |
330 | | - query_data = {} |
331 | | - if sha: |
332 | | - query_data["sha"] = sha |
333 | | - result = self.manager.gitlab.http_get( |
334 | | - path, query_data=query_data, raw=True, streamed=streamed, **kwargs |
335 | | - ) |
336 | | - return utils.response_content(result, streamed, action, chunk_size) |
337 | | - |
338 | 158 | @cli.register_custom_action("Project", ("forked_from_id",)) |
339 | 159 | @exc.on_http_error(exc.GitlabCreateError) |
340 | 160 | def create_fork_relation(self, forked_from_id, **kwargs): |
@@ -366,21 +186,6 @@ def delete_fork_relation(self, **kwargs): |
366 | 186 | path = "/projects/%s/fork" % self.get_id() |
367 | 187 | self.manager.gitlab.http_delete(path, **kwargs) |
368 | 188 |
|
369 | | - @cli.register_custom_action("Project") |
370 | | - @exc.on_http_error(exc.GitlabDeleteError) |
371 | | - def delete_merged_branches(self, **kwargs): |
372 | | - """Delete merged branches. |
373 | | -
|
374 | | - Args: |
375 | | - **kwargs: Extra options to send to the server (e.g. sudo) |
376 | | -
|
377 | | - Raises: |
378 | | - GitlabAuthenticationError: If authentication is not correct |
379 | | - GitlabDeleteError: If the server failed to perform the request |
380 | | - """ |
381 | | - path = "/projects/%s/repository/merged_branches" % self.get_id() |
382 | | - self.manager.gitlab.http_delete(path, **kwargs) |
383 | | - |
384 | 189 | @cli.register_custom_action("Project") |
385 | 190 | @exc.on_http_error(exc.GitlabGetError) |
386 | 191 | def languages(self, **kwargs): |
|
0 commit comments