Merge pull request #2839 from m4tthumphrey/protected-branches-api
Added methods to protect and unprotect branches in from the API
This commit is contained in:
commit
5857a7a9ce
|
@ -33,7 +33,8 @@ Parameters:
|
||||||
},
|
},
|
||||||
"authored_date": "2012-06-27T05:51:39-07:00",
|
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||||
"committed_date": "2012-06-28T03:44:20-07:00"
|
"committed_date": "2012-06-28T03:44:20-07:00"
|
||||||
}
|
},
|
||||||
|
"protected": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
@ -73,7 +74,88 @@ Parameters:
|
||||||
},
|
},
|
||||||
"authored_date": "2012-06-27T05:51:39-07:00",
|
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||||
"committed_date": "2012-06-28T03:44:20-07:00"
|
"committed_date": "2012-06-28T03:44:20-07:00"
|
||||||
|
},
|
||||||
|
"protected": true
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Protect a project repository branch
|
||||||
|
|
||||||
|
Protect a single project repository branch.
|
||||||
|
|
||||||
|
```
|
||||||
|
PUT /projects/:id/repository/branches/:branch/protect
|
||||||
|
```
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
+ `id` (required) - The ID of a project
|
||||||
|
+ `branch` (required) - The name of the branch
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "master",
|
||||||
|
"commit": {
|
||||||
|
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||||
|
"parents": [
|
||||||
|
{
|
||||||
|
"id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tree": "46e82de44b1061621357f24c05515327f2795a95",
|
||||||
|
"message": "add projects API",
|
||||||
|
"author": {
|
||||||
|
"name": "John Smith",
|
||||||
|
"email": "john@example.com"
|
||||||
|
},
|
||||||
|
"committer": {
|
||||||
|
"name": "John Smith",
|
||||||
|
"email": "john@example.com"
|
||||||
|
},
|
||||||
|
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||||
|
"committed_date": "2012-06-28T03:44:20-07:00"
|
||||||
|
},
|
||||||
|
"protected": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Unprotect a project repository branch
|
||||||
|
|
||||||
|
Unprotect a single project repository branch.
|
||||||
|
|
||||||
|
```
|
||||||
|
PUT /projects/:id/repository/branches/:branch/unprotect
|
||||||
|
```
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
+ `id` (required) - The ID of a project
|
||||||
|
+ `branch` (required) - The name of the branch
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "master",
|
||||||
|
"commit": {
|
||||||
|
"id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c",
|
||||||
|
"parents": [
|
||||||
|
{
|
||||||
|
"id": "4ad91d3c1144c406e50c7b33bae684bd6837faf8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tree": "46e82de44b1061621357f24c05515327f2795a95",
|
||||||
|
"message": "add projects API",
|
||||||
|
"author": {
|
||||||
|
"name": "John Smith",
|
||||||
|
"email": "john@example.com"
|
||||||
|
},
|
||||||
|
"committer": {
|
||||||
|
"name": "John Smith",
|
||||||
|
"email": "john@example.com"
|
||||||
|
},
|
||||||
|
"authored_date": "2012-06-27T05:51:39-07:00",
|
||||||
|
"committed_date": "2012-06-28T03:44:20-07:00"
|
||||||
|
},
|
||||||
|
"protected": false
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -110,7 +192,8 @@ Parameters:
|
||||||
},
|
},
|
||||||
"authored_date": "2012-05-28T04:42:42-07:00",
|
"authored_date": "2012-05-28T04:42:42-07:00",
|
||||||
"committed_date": "2012-05-28T04:42:42-07:00"
|
"committed_date": "2012-05-28T04:42:42-07:00"
|
||||||
}
|
},
|
||||||
|
"protected": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
|
@ -34,6 +34,11 @@ module Gitlab
|
||||||
|
|
||||||
class RepoObject < Grape::Entity
|
class RepoObject < Grape::Entity
|
||||||
expose :name, :commit
|
expose :name, :commit
|
||||||
|
expose :protected do |repo, options|
|
||||||
|
if options[:project]
|
||||||
|
options[:project].protected_branch? repo.name
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class RepoCommit < Grape::Entity
|
class RepoCommit < Grape::Entity
|
||||||
|
|
|
@ -218,7 +218,7 @@ module Gitlab
|
||||||
# Example Request:
|
# Example Request:
|
||||||
# GET /projects/:id/repository/branches
|
# GET /projects/:id/repository/branches
|
||||||
get ":id/repository/branches" do
|
get ":id/repository/branches" do
|
||||||
present user_project.repo.heads.sort_by(&:name), with: Entities::RepoObject
|
present user_project.repo.heads.sort_by(&:name), with: Entities::RepoObject, project: user_project
|
||||||
end
|
end
|
||||||
|
|
||||||
# Get a single branch
|
# Get a single branch
|
||||||
|
@ -230,7 +230,43 @@ module Gitlab
|
||||||
# GET /projects/:id/repository/branches/:branch
|
# GET /projects/:id/repository/branches/:branch
|
||||||
get ":id/repository/branches/:branch" do
|
get ":id/repository/branches/:branch" do
|
||||||
@branch = user_project.repo.heads.find { |item| item.name == params[:branch] }
|
@branch = user_project.repo.heads.find { |item| item.name == params[:branch] }
|
||||||
present @branch, with: Entities::RepoObject
|
present @branch, with: Entities::RepoObject, project: user_project
|
||||||
|
end
|
||||||
|
|
||||||
|
# Protect a single branch
|
||||||
|
#
|
||||||
|
# Parameters:
|
||||||
|
# id (required) - The ID of a project
|
||||||
|
# branch (required) - The name of the branch
|
||||||
|
# Example Request:
|
||||||
|
# PUT /projects/:id/repository/branches/:branch/protect
|
||||||
|
put ":id/repository/branches/:branch/protect" do
|
||||||
|
@branch = user_project.repo.heads.find { |item| item.name == params[:branch] }
|
||||||
|
protected = user_project.protected_branches.find_by_name(@branch.name)
|
||||||
|
|
||||||
|
unless protected
|
||||||
|
user_project.protected_branches.create(:name => @branch.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
present @branch, with: Entities::RepoObject, project: user_project
|
||||||
|
end
|
||||||
|
|
||||||
|
# Unprotect a single branch
|
||||||
|
#
|
||||||
|
# Parameters:
|
||||||
|
# id (required) - The ID of a project
|
||||||
|
# branch (required) - The name of the branch
|
||||||
|
# Example Request:
|
||||||
|
# PUT /projects/:id/repository/branches/:branch/unprotect
|
||||||
|
put ":id/repository/branches/:branch/unprotect" do
|
||||||
|
@branch = user_project.repo.heads.find { |item| item.name == params[:branch] }
|
||||||
|
protected = user_project.protected_branches.find_by_name(@branch.name)
|
||||||
|
|
||||||
|
if protected
|
||||||
|
protected.destroy
|
||||||
|
end
|
||||||
|
|
||||||
|
present @branch, with: Entities::RepoObject, project: user_project
|
||||||
end
|
end
|
||||||
|
|
||||||
# Get a project repository tags
|
# Get a project repository tags
|
||||||
|
|
|
@ -107,6 +107,29 @@ describe Gitlab::API do
|
||||||
|
|
||||||
json_response['name'].should == 'new_design'
|
json_response['name'].should == 'new_design'
|
||||||
json_response['commit']['id'].should == '621491c677087aa243f165eab467bfdfbee00be1'
|
json_response['commit']['id'].should == '621491c677087aa243f165eab467bfdfbee00be1'
|
||||||
|
json_response['protected'].should == false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "PUT /projects/:id/repository/branches/:branch/protect" do
|
||||||
|
it "should protect a single branch" do
|
||||||
|
put api("/projects/#{project.id}/repository/branches/new_design/protect", user)
|
||||||
|
response.status.should == 200
|
||||||
|
|
||||||
|
json_response['name'].should == 'new_design'
|
||||||
|
json_response['commit']['id'].should == '621491c677087aa243f165eab467bfdfbee00be1'
|
||||||
|
json_response['protected'].should == true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "PUT /projects/:id/repository/branches/:branch/unprotect" do
|
||||||
|
it "should unprotect a single branch" do
|
||||||
|
put api("/projects/#{project.id}/repository/branches/new_design/unprotect", user)
|
||||||
|
response.status.should == 200
|
||||||
|
|
||||||
|
json_response['name'].should == 'new_design'
|
||||||
|
json_response['commit']['id'].should == '621491c677087aa243f165eab467bfdfbee00be1'
|
||||||
|
json_response['protected'].should == false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue