Skip to content

Commit c99e399

Browse files
author
Gauvain Pocentek
committed
Add support for protected branches
This feature appeared in gitlab 9.5. Fixes #299
1 parent fcccfbd commit c99e399

File tree

4 files changed

+41
-0
lines changed

4 files changed

+41
-0
lines changed

docs/api-objects.rst

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ API examples
77

88
gl_objects/access_requests
99
gl_objects/branches
10+
gl_objects/protected_branches
1011
gl_objects/messages
1112
gl_objects/builds
1213
gl_objects/commits

docs/gl_objects/branches.py

+18
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,21 @@
2626
branch.protect()
2727
branch.unprotect()
2828
# end protect
29+
30+
# p_branch list
31+
p_branches = project.protectedbranches.list()
32+
# end p_branch list
33+
34+
# p_branch get
35+
p_branch = project.protectedbranches.get('master')
36+
# end p_branch get
37+
38+
# p_branch create
39+
p_branch = project.protectedbranches.create({'name': '*-stable'})
40+
# end p_branch create
41+
42+
# p_branch delete
43+
project.protectedbranches.delete('*-stable')
44+
# or
45+
p_branch.delete()
46+
# end p_branch delete

gitlab/v4/objects.py

+12
Original file line numberDiff line numberDiff line change
@@ -1732,6 +1732,17 @@ class ProjectDeploymentManager(RetrieveMixin, RESTManager):
17321732
_from_parent_attrs = {'project_id': 'id'}
17331733

17341734

1735+
class ProjectProtectedBranch(ObjectDeleteMixin, RESTObject):
1736+
_id_attr = 'name'
1737+
1738+
1739+
class ProjectProtectedBranchManager(NoUpdateMixin, RESTManager):
1740+
_path = '/projects/%(project_id)s/protected_branches'
1741+
_obj_cls = ProjectProtectedBranch
1742+
_from_parent_attrs = {'project_id': 'id'}
1743+
_create_attrs = (('name', ), ('push_access_level', 'merge_access_level'))
1744+
1745+
17351746
class ProjectRunner(ObjectDeleteMixin, RESTObject):
17361747
pass
17371748

@@ -1767,6 +1778,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
17671778
('notes', 'ProjectNoteManager'),
17681779
('notificationsettings', 'ProjectNotificationSettingsManager'),
17691780
('pipelines', 'ProjectPipelineManager'),
1781+
('protectedbranches', 'ProjectProtectedBranchManager'),
17701782
('runners', 'ProjectRunnerManager'),
17711783
('services', 'ProjectServiceManager'),
17721784
('snippets', 'ProjectSnippetManager'),

tools/python_test_v4.py

+10
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,16 @@
394394
except gitlab.GitlabMRClosedError:
395395
pass
396396

397+
# protected branches
398+
p_b = admin_project.protectedbranches.create({'name': '*-stable'})
399+
assert(p_b.name == '*-stable')
400+
p_b = admin_project.protectedbranches.get('*-stable')
401+
# master is protected by default
402+
assert(len(admin_project.protectedbranches.list()) == 2)
403+
admin_project.protectedbranches.delete('master')
404+
p_b.delete()
405+
assert(len(admin_project.protectedbranches.list()) == 0)
406+
397407
# stars
398408
admin_project.star()
399409
assert(admin_project.star_count == 1)

0 commit comments

Comments
 (0)