forked from Gitlink/forgeplus
ADD edit protected branch api
This commit is contained in:
parent
b3649f03e7
commit
3f60dd3f83
|
@ -2734,6 +2734,75 @@ http://localhost:3000/api/trustie/truesite/protected_branches.json | jq
|
||||||
```
|
```
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 编辑保护分支参数
|
||||||
|
```
|
||||||
|
GET /api/:owner/:repo/protected_branches/:branch_name/edit
|
||||||
|
```
|
||||||
|
*示例*
|
||||||
|
```
|
||||||
|
curl -X GET \
|
||||||
|
http://localhost:3000/api/trustie/truesite/protected_branches/master/edit.json | jq
|
||||||
|
```
|
||||||
|
*请求参数说明:*
|
||||||
|
|
||||||
|
|参数名|必选|类型|说明|
|
||||||
|
|-|-|-|-|
|
||||||
|
|owner |是|string |项目拥有者登录名 |
|
||||||
|
|repo |否|boolean |仓库名称 |
|
||||||
|
|branch_name |是|string |保护分支名称 |
|
||||||
|
|
||||||
|
*返回参数说明:*
|
||||||
|
|
||||||
|
|参数名|类型|说明|
|
||||||
|
|-|-|-|
|
||||||
|
|protected |boolean |是否为保护分支, true: 是; false: 不是 |
|
||||||
|
|branch_name |string |保护分支名称 |
|
||||||
|
|enable_push |boolean |是否启用推送, true: 启用; false: 不启用, 默认为false |
|
||||||
|
|enable_push_whitelist |boolean |是否启用白名单推送, true: 启用; false: 不启用, 默认为false, 该参数与enable_push参数为单选项,只能选择|
|
||||||
|
|push_whitelist_usernames |array |推送白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_push_whitelist参数配合使用 |
|
||||||
|
|enable_merge_whitelist |boolean |是否启用合并白名单, true: 启用, false: 不启用, 默认为false |
|
||||||
|
|merge_whitelist_usernames |array |合并白名单用户(即具有写操作的项目成员名称的数组), 该参数与enable_merge_whitelist配合使用 |
|
||||||
|
|enable_status_check |boolean |是否启用状态检查, true: 启用; false: 不启用, 默认为false |
|
||||||
|
|required_approvals |int |所需的批准数, 默认为0 |
|
||||||
|
|enable_approvals_whitelist |boolean |是否启用批准仅限列入白名单的用户或团队, true: 启用, false: 不启用, 默认为false |
|
||||||
|
|approvals_whitelist_username |array |审查者白名单(即具有写操作的项目成员名称的数组), 该参数与enable_approvals_whitelist配合使用 |
|
||||||
|
|block_on_rejected_reviews |boolean |是否启用拒绝审核阻止合并功能, true: 启用, false: 不启用, 默认为false |
|
||||||
|
|dismiss_stale_approvals |boolean |是否启用取消过时的批准, true: 启用, false: 不启用, 默认为false |
|
||||||
|
|require_signed_commits |boolean |是否需要签名提交, true: 是, false: 否, 默认为false |
|
||||||
|
|block_on_outdated_branch |boolean |如果拉取请求已经过时,是否阻止合并, true: 是, false: 否, 默认为false |
|
||||||
|
|created_at |string|创建时间|
|
||||||
|
|updated_at |string|更新时间|
|
||||||
|
|
||||||
|
|
||||||
|
返回值
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"branch_name": "master",
|
||||||
|
"protected": true,
|
||||||
|
"protected_branch": {
|
||||||
|
"branch_name": "master",
|
||||||
|
"enable_push": false,
|
||||||
|
"required_approvals": 0,
|
||||||
|
"enable_status_check": true,
|
||||||
|
"enable_push_whitelist": false,
|
||||||
|
"enable_merge_whitelist": true,
|
||||||
|
"enable_approvals_whitelist": false,
|
||||||
|
"dismiss_stale_approvals": false,
|
||||||
|
"block_on_rejected_reviews": false,
|
||||||
|
"block_on_outdated_branch": false,
|
||||||
|
"require_signed_commits": false,
|
||||||
|
"merge_whitelist_usernames": [
|
||||||
|
"jasder"
|
||||||
|
],
|
||||||
|
"push_whitelist_usernames": [],
|
||||||
|
"approvals_whitelist_usernames": [],
|
||||||
|
"created_at": "2020-12-03 12:00",
|
||||||
|
"updated_at": "2020-12-04 10:50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
### 修改保护分支参数
|
### 修改保护分支参数
|
||||||
```
|
```
|
||||||
PATCH /api/:owner/:repo/protected_branches/:branch_name
|
PATCH /api/:owner/:repo/protected_branches/:branch_name
|
||||||
|
|
|
@ -31,6 +31,10 @@ class ProtectedBranchesController < ApplicationController
|
||||||
@protected_branch = ProtectedBranches::GetService.call(@repository, @owner, params)
|
@protected_branch = ProtectedBranches::GetService.call(@repository, @owner, params)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@branch, @protected_branch = ProtectedBranches::EditService.call(@repository, @owner, params[:branch_name])
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def render_protected_branch_json
|
def render_protected_branch_json
|
||||||
@protected_branch.persisted? ? @protected_branch : render_error('创建失败!')
|
@protected_branch.persisted? ? @protected_branch : render_error('创建失败!')
|
||||||
|
|
|
@ -168,17 +168,33 @@ class Gitea::ClientService < ApplicationService
|
||||||
status = response.status
|
status = response.status
|
||||||
body = response&.body
|
body = response&.body
|
||||||
|
|
||||||
|
log_error(status, body)
|
||||||
|
|
||||||
|
body, message = get_body_by_status(status, body)
|
||||||
|
|
||||||
|
[status, message, body]
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_body_by_status(status, body)
|
||||||
body, message =
|
body, message =
|
||||||
|
case status
|
||||||
|
when 404 then [nil, "404"]
|
||||||
|
when 403 then [nil, "403"]
|
||||||
|
else
|
||||||
if body.present?
|
if body.present?
|
||||||
body = JSON.parse(body)
|
body = JSON.parse(body)
|
||||||
fix_body(body)
|
fix_body(body)
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
[body, message]
|
||||||
|
end
|
||||||
|
|
||||||
|
def log_error(status, body)
|
||||||
puts "[gitea] status: #{status}"
|
puts "[gitea] status: #{status}"
|
||||||
puts "[gitea] message: #{message}"
|
|
||||||
puts "[gitea] body: #{body}"
|
puts "[gitea] body: #{body}"
|
||||||
[status, message, body]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def fix_body(body)
|
def fix_body(body)
|
||||||
|
@ -241,7 +257,7 @@ class Gitea::ClientService < ApplicationService
|
||||||
success_statuses = [200, 201, 202, 204]
|
success_statuses = [200, 201, 202, 204]
|
||||||
status, message, body = render_response(response)
|
status, message, body = render_response(response)
|
||||||
|
|
||||||
error(message, status) unless success_statuses.include? status
|
return error(message, status) unless success_statuses.include? status
|
||||||
|
|
||||||
render_body(body)
|
render_body(body)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
module ProtectedBranches
|
module ProtectedBranches
|
||||||
class BaseService < ApplicationService
|
class BaseService < ApplicationService
|
||||||
|
Error = Class.new(StandardError)
|
||||||
attr_accessor :repository, :owner, :params
|
attr_accessor :repository, :owner, :params
|
||||||
|
|
||||||
def initialize(repository, user = nil, params = {})
|
def initialize(repository, user = nil, params = {})
|
||||||
|
@ -263,4 +264,13 @@ module ProtectedBranches
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def error(errors, award: nil, status: nil)
|
||||||
|
errors = Array.wrap(errors)
|
||||||
|
|
||||||
|
super(errors.to_sentence.presence, status).merge({
|
||||||
|
award: award,
|
||||||
|
errors: errors
|
||||||
|
})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,9 +3,10 @@ module ProtectedBranches
|
||||||
def call
|
def call
|
||||||
validate!
|
validate!
|
||||||
|
|
||||||
|
ProtectedBranch.transaction do
|
||||||
save_gitea_protected_branch!
|
save_gitea_protected_branch!
|
||||||
|
|
||||||
save_protected_branch!
|
save_protected_branch!
|
||||||
|
end
|
||||||
|
|
||||||
protected_branch
|
protected_branch
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
module ProtectedBranches
|
||||||
|
class EditService < ProtectedBranches::BaseService
|
||||||
|
def call
|
||||||
|
validate_branch_name!
|
||||||
|
|
||||||
|
protected_branch
|
||||||
|
rescue => ex
|
||||||
|
Rails.logger.info ex
|
||||||
|
raise Error, ex
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def protected_branch
|
||||||
|
branch = get_common_branch
|
||||||
|
protected_branch ||= @repository.protected_branches.find_by(branch_name: branch_name)
|
||||||
|
[branch, protected_branch]
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_common_branch
|
||||||
|
result = Gitea::Repository::Branches::GetService.call(@owner.login,
|
||||||
|
@repository.identifier, branch_name, @owner.gitea_token)
|
||||||
|
|
||||||
|
raise Error, '404' if result[:status] == :error
|
||||||
|
result
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_branch_name!
|
||||||
|
raise Error, '分支名称不能为空' if branch_name.blank?
|
||||||
|
end
|
||||||
|
|
||||||
|
def branch_name
|
||||||
|
params
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,9 @@
|
||||||
|
json.branch_name @branch['name']
|
||||||
|
json.protected @branch['protected']
|
||||||
|
json.protected_branch do
|
||||||
|
if @protected_branch
|
||||||
|
json.partial! @protected_branch, as: :protected_branch
|
||||||
|
else
|
||||||
|
json.nil!
|
||||||
|
end
|
||||||
|
end
|
|
@ -333,6 +333,10 @@ Rails.application.routes.draw do
|
||||||
'/protected_branches/:branch_name',
|
'/protected_branches/:branch_name',
|
||||||
to: 'protected_branches#show'
|
to: 'protected_branches#show'
|
||||||
)
|
)
|
||||||
|
get(
|
||||||
|
'/protected_branches/:branch_name/edit',
|
||||||
|
to: 'protected_branches#edit'
|
||||||
|
)
|
||||||
delete(
|
delete(
|
||||||
'/protected_branches/:branch_name',
|
'/protected_branches/:branch_name',
|
||||||
to: 'protected_branches#destroy'
|
to: 'protected_branches#destroy'
|
||||||
|
|
Loading…
Reference in New Issue