Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
54d26c89
Commit
54d26c89
authored
Jul 12, 2016
by
Robert Schilling
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
API: Expose 'developers_can_push' for branches
parent
78cd5b8d
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
114 additions
and
10 deletions
+114
-10
CHANGELOG
CHANGELOG
+1
-0
doc/api/branches.md
doc/api/branches.md
+10
-4
lib/api/branches.rb
lib/api/branches.rb
+10
-2
lib/api/entities.rb
lib/api/entities.rb
+8
-2
lib/api/helpers.rb
lib/api/helpers.rb
+7
-0
spec/requests/api/api_helpers_spec.rb
spec/requests/api/api_helpers_spec.rb
+23
-0
spec/requests/api/branches_spec.rb
spec/requests/api/branches_spec.rb
+55
-2
No files found.
CHANGELOG
View file @
54d26c89
...
@@ -57,6 +57,7 @@ v 8.10.0 (unreleased)
...
@@ -57,6 +57,7 @@ v 8.10.0 (unreleased)
- API: Expose `due_date` for issues (Robert Schilling)
- API: Expose `due_date` for issues (Robert Schilling)
- API: Todos !3188 (Robert Schilling)
- API: Todos !3188 (Robert Schilling)
- API: Expose shared groups for projects and shared projects for groups !5050 (Robert Schilling)
- API: Expose shared groups for projects and shared projects for groups !5050 (Robert Schilling)
- API: Expose 'developers_can_push' for branches !5208 (Robert Schilling)
- Add "Enabled Git access protocols" to Application Settings
- Add "Enabled Git access protocols" to Application Settings
- Diffs will create button/diff form on demand no on server side
- Diffs will create button/diff form on demand no on server side
- Reduce size of HTML used by diff comment forms
- Reduce size of HTML used by diff comment forms
...
...
doc/api/branches.md
View file @
54d26c89
...
@@ -23,6 +23,7 @@ Example response:
...
@@ -23,6 +23,7 @@ Example response:
{
{
"name"
:
"master"
,
"name"
:
"master"
,
"protected"
:
true
,
"protected"
:
true
,
"developers_can_push"
:
false
,
"commit"
:
{
"commit"
:
{
"author_email"
:
"john@example.com"
,
"author_email"
:
"john@example.com"
,
"author_name"
:
"John Smith"
,
"author_name"
:
"John Smith"
,
...
@@ -64,6 +65,7 @@ Example response:
...
@@ -64,6 +65,7 @@ Example response:
{
{
"name"
:
"master"
,
"name"
:
"master"
,
"protected"
:
true
,
"protected"
:
true
,
"developers_can_push"
:
false
,
"commit"
:
{
"commit"
:
{
"author_email"
:
"john@example.com"
,
"author_email"
:
"john@example.com"
,
"author_name"
:
"John Smith"
,
"author_name"
:
"John Smith"
,
...
@@ -91,13 +93,14 @@ PUT /projects/:id/repository/branches/:branch/protect
...
@@ -91,13 +93,14 @@ PUT /projects/:id/repository/branches/:branch/protect
```
```
```
bash
```
bash
curl
-X
PUT
-H
"PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK"
https://gitlab.example.com/api/v3/projects/5/repository/branches/master/protect
curl
-X
PUT
-H
"PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK"
https://gitlab.example.com/api/v3/projects/5/repository/branches/master/protect
?developers_can_push
=
true
```
```
| Attribute | Type | Required | Description |
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| --------- | ---- | -------- | ----------- |
|
`id`
| integer | yes | The ID of a project |
|
`id`
| integer | yes | The ID of a project |
|
`branch`
| string | yes | The name of the branch |
|
`branch`
| string | yes | The name of the branch |
|
`developers_can_push`
| boolean | no | Flag if developers can push to the branch |
Example response:
Example response:
...
@@ -117,7 +120,8 @@ Example response:
...
@@ -117,7 +120,8 @@ Example response:
]
]
},
},
"name"
:
"master"
,
"name"
:
"master"
,
"protected"
:
true
"protected"
:
true
,
"developers_can_push"
:
true
}
}
```
```
...
@@ -158,7 +162,8 @@ Example response:
...
@@ -158,7 +162,8 @@ Example response:
]
]
},
},
"name"
:
"master"
,
"name"
:
"master"
,
"protected"
:
false
"protected"
:
false
,
"developers_can_push"
:
false
}
}
```
```
...
@@ -196,7 +201,8 @@ Example response:
...
@@ -196,7 +201,8 @@ Example response:
]
]
},
},
"name"
:
"newbranch"
,
"name"
:
"newbranch"
,
"protected"
:
false
"protected"
:
false
,
"developers_can_push"
:
false
}
}
```
```
...
...
lib/api/branches.rb
View file @
54d26c89
...
@@ -36,6 +36,7 @@ module API
...
@@ -36,6 +36,7 @@ module API
# Parameters:
# Parameters:
# id (required) - The ID of a project
# id (required) - The ID of a project
# branch (required) - The name of the branch
# branch (required) - The name of the branch
# developers_can_push (optional) - Flag if developers can push to that branch
# Example Request:
# Example Request:
# PUT /projects/:id/repository/branches/:branch/protect
# PUT /projects/:id/repository/branches/:branch/protect
put
':id/repository/branches/:branch/protect'
,
put
':id/repository/branches/:branch/protect'
,
...
@@ -43,9 +44,16 @@ module API
...
@@ -43,9 +44,16 @@ module API
authorize_admin_project
authorize_admin_project
@branch
=
user_project
.
repository
.
find_branch
(
params
[
:branch
])
@branch
=
user_project
.
repository
.
find_branch
(
params
[
:branch
])
not_found!
(
"Branch"
)
unless
@branch
not_found!
(
'Branch'
)
unless
@branch
protected_branch
=
user_project
.
protected_branches
.
find_by
(
name:
@branch
.
name
)
protected_branch
=
user_project
.
protected_branches
.
find_by
(
name:
@branch
.
name
)
user_project
.
protected_branches
.
create
(
name:
@branch
.
name
)
unless
protected_branch
developers_can_push
=
to_boolean
(
params
[
:developers_can_push
])
if
protected_branch
protected_branch
.
update
(
developers_can_push:
developers_can_push
)
unless
developers_can_push
.
nil?
else
user_project
.
protected_branches
.
create
(
name:
@branch
.
name
,
developers_can_push:
developers_can_push
||
false
)
end
present
@branch
,
with:
Entities
::
RepoObject
,
project:
user_project
present
@branch
,
with:
Entities
::
RepoObject
,
project:
user_project
end
end
...
...
lib/api/entities.rb
View file @
54d26c89
...
@@ -125,9 +125,15 @@ module API
...
@@ -125,9 +125,15 @@ module API
end
end
end
end
expose
:protected
do
|
repo
,
options
|
expose
:protected
do
|
repo
_obj
,
options
|
if
options
[
:project
]
if
options
[
:project
]
options
[
:project
].
protected_branch?
repo
.
name
options
[
:project
].
protected_branch?
repo_obj
.
name
end
end
expose
:developers_can_push
do
|
repo_obj
,
options
|
if
options
[
:project
]
options
[
:project
].
developers_can_push_to_protected_branch?
repo_obj
.
name
end
end
end
end
end
end
...
...
lib/api/helpers.rb
View file @
54d26c89
...
@@ -9,6 +9,13 @@ module API
...
@@ -9,6 +9,13 @@ module API
[
true
,
1
,
'1'
,
't'
,
'T'
,
'true'
,
'TRUE'
,
'on'
,
'ON'
].
include?
(
value
)
[
true
,
1
,
'1'
,
't'
,
'T'
,
'true'
,
'TRUE'
,
'on'
,
'ON'
].
include?
(
value
)
end
end
def
to_boolean
(
value
)
return
true
if
value
=~
/^(true|t|yes|y|1|on)$/i
return
false
if
value
=~
/^(false|f|no|n|0|off)$/i
nil
end
def
find_user_by_private_token
def
find_user_by_private_token
token_string
=
(
params
[
PRIVATE_TOKEN_PARAM
]
||
env
[
PRIVATE_TOKEN_HEADER
]).
to_s
token_string
=
(
params
[
PRIVATE_TOKEN_PARAM
]
||
env
[
PRIVATE_TOKEN_HEADER
]).
to_s
User
.
find_by_authentication_token
(
token_string
)
||
User
.
find_by_personal_access_token
(
token_string
)
User
.
find_by_authentication_token
(
token_string
)
||
User
.
find_by_personal_access_token
(
token_string
)
...
...
spec/requests/api/api_helpers_spec.rb
View file @
54d26c89
...
@@ -211,4 +211,27 @@ describe API::Helpers, api: true do
...
@@ -211,4 +211,27 @@ describe API::Helpers, api: true do
expect
(
sudo_identifier
).
to
eq
(
' 123'
)
expect
(
sudo_identifier
).
to
eq
(
' 123'
)
end
end
end
end
describe
'.to_boolean'
do
it
'converts a valid string to a boolean'
do
expect
(
to_boolean
(
'true'
)).
to
be_truthy
expect
(
to_boolean
(
'YeS'
)).
to
be_truthy
expect
(
to_boolean
(
't'
)).
to
be_truthy
expect
(
to_boolean
(
'1'
)).
to
be_truthy
expect
(
to_boolean
(
'ON'
)).
to
be_truthy
expect
(
to_boolean
(
'FaLse'
)).
to
be_falsy
expect
(
to_boolean
(
'F'
)).
to
be_falsy
expect
(
to_boolean
(
'NO'
)).
to
be_falsy
expect
(
to_boolean
(
'n'
)).
to
be_falsy
expect
(
to_boolean
(
'0'
)).
to
be_falsy
expect
(
to_boolean
(
'oFF'
)).
to
be_falsy
end
it
'converts an invalid string to nil'
do
expect
(
to_boolean
(
'fals'
)).
to
be_nil
expect
(
to_boolean
(
'yeah'
)).
to
be_nil
expect
(
to_boolean
(
''
)).
to
be_nil
expect
(
to_boolean
(
nil
)).
to
be_nil
end
end
end
end
spec/requests/api/branches_spec.rb
View file @
54d26c89
...
@@ -32,6 +32,7 @@ describe API::API, api: true do
...
@@ -32,6 +32,7 @@ describe API::API, api: true do
expect
(
json_response
[
'name'
]).
to
eq
(
branch_name
)
expect
(
json_response
[
'name'
]).
to
eq
(
branch_name
)
expect
(
json_response
[
'commit'
][
'id'
]).
to
eq
(
branch_sha
)
expect
(
json_response
[
'commit'
][
'id'
]).
to
eq
(
branch_sha
)
expect
(
json_response
[
'protected'
]).
to
eq
(
false
)
expect
(
json_response
[
'protected'
]).
to
eq
(
false
)
expect
(
json_response
[
'developers_can_push'
]).
to
eq
(
false
)
end
end
it
"should return a 403 error if guest"
do
it
"should return a 403 error if guest"
do
...
@@ -45,14 +46,66 @@ describe API::API, api: true do
...
@@ -45,14 +46,66 @@ describe API::API, api: true do
end
end
end
end
describe
"PUT /projects/:id/repository/branches/:branch/protect"
do
describe
'PUT /projects/:id/repository/branches/:branch/protect'
do
it
"should protect a single branch"
do
it
'protects a single branch'
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/
#{
branch_name
}
/protect"
,
user
)
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/
#{
branch_name
}
/protect"
,
user
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'name'
]).
to
eq
(
branch_name
)
expect
(
json_response
[
'commit'
][
'id'
]).
to
eq
(
branch_sha
)
expect
(
json_response
[
'protected'
]).
to
eq
(
true
)
expect
(
json_response
[
'developers_can_push'
]).
to
eq
(
false
)
end
it
'protects a single branch and developers can push'
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/
#{
branch_name
}
/protect"
,
user
),
developers_can_push:
true
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'name'
]).
to
eq
(
branch_name
)
expect
(
json_response
[
'name'
]).
to
eq
(
branch_name
)
expect
(
json_response
[
'commit'
][
'id'
]).
to
eq
(
branch_sha
)
expect
(
json_response
[
'commit'
][
'id'
]).
to
eq
(
branch_sha
)
expect
(
json_response
[
'protected'
]).
to
eq
(
true
)
expect
(
json_response
[
'protected'
]).
to
eq
(
true
)
expect
(
json_response
[
'developers_can_push'
]).
to
eq
(
true
)
end
it
'protects a single branch and developers cannot push'
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/
#{
branch_name
}
/protect"
,
user
),
developers_can_push:
'tru'
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'name'
]).
to
eq
(
branch_name
)
expect
(
json_response
[
'commit'
][
'id'
]).
to
eq
(
branch_sha
)
expect
(
json_response
[
'protected'
]).
to
eq
(
true
)
expect
(
json_response
[
'developers_can_push'
]).
to
eq
(
false
)
end
context
'on a protected branch'
do
let
(
:protected_branch
)
{
'foo'
}
before
do
project
.
repository
.
add_branch
(
user
,
protected_branch
,
'master'
)
create
(
:protected_branch
,
project:
project
,
name:
protected_branch
,
developers_can_push:
true
)
end
it
'updates that a developer can push'
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/
#{
protected_branch
}
/protect"
,
user
),
developers_can_push:
false
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'name'
]).
to
eq
(
protected_branch
)
expect
(
json_response
[
'protected'
]).
to
eq
(
true
)
expect
(
json_response
[
'developers_can_push'
]).
to
eq
(
false
)
end
it
'does not update that a developer can push'
do
put
api
(
"/projects/
#{
project
.
id
}
/repository/branches/
#{
protected_branch
}
/protect"
,
user
),
developers_can_push:
'foobar'
expect
(
response
).
to
have_http_status
(
200
)
expect
(
json_response
[
'name'
]).
to
eq
(
protected_branch
)
expect
(
json_response
[
'protected'
]).
to
eq
(
true
)
expect
(
json_response
[
'developers_can_push'
]).
to
eq
(
true
)
end
end
end
it
"should return a 404 error if branch not found"
do
it
"should return a 404 error if branch not found"
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment