mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-02 19:30:48 +08:00
Merge pull request '代码仓库同步部分代码' (#282) from reposync_feature into standalone_develop
This commit is contained in:
109
app/services/api/v1/projects/sync_repositories/create_service.rb
Normal file
109
app/services/api/v1/projects/sync_repositories/create_service.rb
Normal file
@@ -0,0 +1,109 @@
|
||||
class Api::V1::Projects::SyncRepositories::CreateService < ApplicationService
|
||||
|
||||
include ActiveModel::Model
|
||||
|
||||
attr_reader :project, :type, :external_token, :external_repo_address, :sync_granularity, :external_branch_name, :gitlink_branch_name, :first_sync_direction
|
||||
attr_accessor :sync_repository1, :sync_repository2, :sync_repository_branch1, :sync_repository_branch2, :gitea_webhook
|
||||
|
||||
validates :type, inclusion: {in: %w(SyncRepositories::Gitee SyncRepositories::Github)}
|
||||
validates :external_repo_address, format: { with: CustomRegexp::URL_REGEX, multiline: true, message: "地址格式不正确" }
|
||||
validates :sync_granularity, :first_sync_direction, inclusion: {in: [1,2]}
|
||||
validate :check_gitlink_branch_name
|
||||
|
||||
def initialize(project, params)
|
||||
@project = project
|
||||
@type = params[:type]
|
||||
@external_token = params[:external_token]
|
||||
@external_repo_address = params[:external_repo_address]
|
||||
@sync_granularity = params[:sync_granularity].to_i
|
||||
@external_branch_name = params[:external_branch_name]
|
||||
@gitlink_branch_name = params[:gitlink_branch_name]
|
||||
@first_sync_direction = params[:first_sync_direction].to_i
|
||||
end
|
||||
|
||||
def call
|
||||
raise Error, errors.full_messages.join(",") unless valid?
|
||||
|
||||
create_webhook
|
||||
if sync_granularity == 2
|
||||
# 创建两个不同方向的同步仓库
|
||||
create_sync_repository
|
||||
# 创建两个不同方向的同步分支
|
||||
create_sync_repository_branch
|
||||
# 第一次同步
|
||||
touch_first_sync_branch
|
||||
else
|
||||
create_sync_repository
|
||||
touch_first_sync
|
||||
end
|
||||
|
||||
[@sync_repository1, @sync_repository2, @sync_repository_branch1, @sync_repository_branch2]
|
||||
end
|
||||
|
||||
def check_gitlink_branch_name
|
||||
if sync_granularity == 2
|
||||
result = $gitea_hat_client.get_repos_branch_name_set_by_owner_repo(project&.owner&.login, project&.identifier) rescue nil
|
||||
raise Error, '分支不存在' if !result.include?(gitlink_branch_name)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def create_sync_repository
|
||||
repository1 = Reposync::CreateSyncRepoService.call(repo_name(1), gitlink_repo_address, gitlink_token, external_repo_address, external_token, sync_granularity, 1)
|
||||
repository2 = Reposync::CreateSyncRepoService.call(repo_name(2), gitlink_repo_address, gitlink_token, external_repo_address, external_token, sync_granularity, 2)
|
||||
raise Error, '创建同步仓库失败' if repository1[0].to_i > 0 || repository2[0].to_i > 0
|
||||
@sync_repository1 = SyncRepository.create!(project: project, type: type, repo_name: repo_name(1), external_repo_address: external_repo_address, external_token: external_token, sync_granularity: sync_granularity, sync_direction: 1, webhook_gid: @gitea_webhook["id"])
|
||||
@sync_repository2 = SyncRepository.create!(project: project, type: type, repo_name: repo_name(2), external_repo_address: external_repo_address, external_token: external_token, sync_granularity: sync_granularity, sync_direction: 2, webhook_gid: @gitea_webhook["id"])
|
||||
end
|
||||
|
||||
def create_sync_repository_branch
|
||||
branch1 = Reposync::CreateSyncBranchService.call(repo_name(1),gitlink_branch_name, external_branch_name)
|
||||
branch2 = Reposync::CreateSyncBranchService.call(repo_name(2),gitlink_branch_name, external_branch_name)
|
||||
raise Error, '创建同步仓库分支失败' if branch1[0].to_i > 0 || branch2[0].to_i > 0
|
||||
@sync_repository_branch1 = SyncRepositoryBranch.create!(sync_repository: @sync_repository1, gitlink_branch_name: gitlink_branch_name, external_branch_name: external_branch_name, reposync_branch_id: branch1[1]["id"])
|
||||
@sync_repository_branch2 = SyncRepositoryBranch.create!(sync_repository: @sync_repository2, gitlink_branch_name: gitlink_branch_name, external_branch_name: external_branch_name, reposync_branch_id: branch2[1]["id"])
|
||||
end
|
||||
|
||||
def touch_first_sync
|
||||
first_sync_direction == 1 ? TouchSyncJob.perform_later(@sync_repository1) : TouchSyncJob.perform_later(@sync_repository2)
|
||||
end
|
||||
|
||||
def touch_first_sync_branch
|
||||
first_sync_direction == 1 ? TouchSyncJob.perform_later(@sync_repository_branch1) : TouchSyncJob.perform_later(@sync_repository_branch2)
|
||||
end
|
||||
|
||||
def create_webhook
|
||||
url = ""
|
||||
if type == "SyncRepositories::Gitee"
|
||||
url = "#{Rails.application.config_for(:configuration)['platform_url']}/api/v1/#{project&.owner&.login}/#{project&.identifier}/sync_repositories/sync?sync_direction=1&repo_type=SyncRepositories::Gitee"
|
||||
else
|
||||
url = "#{Rails.application.config_for(:configuration)['platform_url']}/api/v1/#{project&.owner&.login}/#{project&.identifier}/sync_repositories/sync?sync_direction=1&repo_type=SyncRepositories::Github"
|
||||
end
|
||||
webhook_params = {
|
||||
active: true,
|
||||
branch_filter: '*',
|
||||
http_method: 'POST',
|
||||
url: url,
|
||||
content_type: 'json',
|
||||
type: 'reposync',
|
||||
events: ["push"]
|
||||
}
|
||||
@gitea_webhook = Api::V1::Projects::Webhooks::CreateService.call(project, webhook_params)
|
||||
end
|
||||
|
||||
def repo_name(sync_direction)
|
||||
if type == "SyncRepositories::Gitee"
|
||||
return "gitee:#{project.id}:#{sync_granularity}:#{sync_direction}"
|
||||
else
|
||||
return "github:#{project.id}:#{sync_granularity}:#{sync_direction}"
|
||||
end
|
||||
end
|
||||
|
||||
def gitlink_repo_address
|
||||
"#{EduSetting.get("gitlink_repo_domain")}/#{project.owner&.login}/#{project.identifier}.git"
|
||||
end
|
||||
|
||||
def gitlink_token
|
||||
EduSetting.get("gitlink_admin_token")
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,40 @@
|
||||
class Api::V1::Projects::SyncRepositories::UpdateService < ApplicationService
|
||||
|
||||
include ActiveModel::Model
|
||||
attr_reader :project, :external_token, :external_repo_address, :sync_repositories
|
||||
attr_accessor :sync_repository1, :sync_repository2
|
||||
|
||||
validates :external_repo_address, format: { with: CustomRegexp::URL_REGEX, multiline: true, message: "地址格式不正确" }
|
||||
validates :external_token, presence: true
|
||||
|
||||
#Api::V1::Projects::SyncRepositories::UpdateService.call(Project.last, "21,22", {external_repo_address: "https://github.com/viletyy/testdevops.git", external_token:"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"})
|
||||
def initialize(project, sync_repository_ids, params)
|
||||
@project = project
|
||||
@sync_repositories = SyncRepository.where(project_id: project.id, id: sync_repository_ids.split(","))
|
||||
@external_token = params[:external_token]
|
||||
@external_repo_address = params[:external_repo_address]
|
||||
end
|
||||
|
||||
def call
|
||||
raise Error, errors.full_messages.join(",") unless valid?
|
||||
|
||||
update_sync_repository
|
||||
|
||||
end
|
||||
|
||||
private
|
||||
def update_sync_repository
|
||||
@sync_repositories.each do |repo|
|
||||
Reposync::UpdateRepoAddrService.call(repo&.repo_name, internal_repo_address, internal_token, external_repo_address, external_token)
|
||||
repo.update_attributes!({external_repo_address: external_repo_address, external_token: external_token})
|
||||
end
|
||||
end
|
||||
|
||||
def internal_repo_address
|
||||
"#{EduSetting.get("gitlink_repo_domain")}/#{project.owner&.login}/#{project.identifier}.git"
|
||||
end
|
||||
|
||||
def internal_token
|
||||
EduSetting.get("gitlink_admin_token")
|
||||
end
|
||||
end
|
||||
@@ -8,7 +8,7 @@ class Api::V1::Projects::Webhooks::CreateService < ApplicationService
|
||||
validates :active, inclusion: {in: [true, false]}
|
||||
validates :http_method, inclusion: { in: %w(POST GET), message: "请输入正确的请求方式"}
|
||||
validates :content_type, inclusion: { in: %w(json form), message: "请输入正确的Content Type"}
|
||||
validates :type, inclusion: {in: %w(gitea slack discord dingtalk telegram msteams feishu matrix jianmu softbot), message: "请输入正确的Webhook Type"}
|
||||
validates :type, inclusion: {in: %w(gitea slack discord dingtalk telegram msteams feishu matrix jianmu softbot reposync), message: "请输入正确的Webhook Type"}
|
||||
def initialize(project, params, token=nil)
|
||||
@project = project
|
||||
@owner = project&.owner.login
|
||||
|
||||
115
app/services/reposync/client_service.rb
Normal file
115
app/services/reposync/client_service.rb
Normal file
@@ -0,0 +1,115 @@
|
||||
class Reposync::ClientService < ApplicationService
|
||||
attr_reader :url, :params
|
||||
|
||||
def initialize(options={})
|
||||
@url = options[:url]
|
||||
@params = options[:params]
|
||||
end
|
||||
|
||||
def post(url, params={})
|
||||
puts "[reposync][POST] request params: #{params}"
|
||||
conn.post do |req|
|
||||
req.url full_url(url)
|
||||
req.body = params[:data].to_json
|
||||
end
|
||||
end
|
||||
|
||||
def get(url, params={})
|
||||
puts "[reposync][GET] request params: #{params}"
|
||||
conn.get do |req|
|
||||
req.url full_url(url, 'get')
|
||||
params.each_pair do |key, value|
|
||||
req.params["#{key}"] = value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def delete(url, params={})
|
||||
puts "[reposync][DELETE] request params: #{params}"
|
||||
conn.delete do |req|
|
||||
req.url full_url(url)
|
||||
req.body = params[:data].to_json
|
||||
end
|
||||
end
|
||||
|
||||
def patch(url, params={})
|
||||
puts "[reposync][PATCH] request params: #{params}"
|
||||
conn.patch do |req|
|
||||
req.url full_url(url)
|
||||
req.body = params[:data].to_json
|
||||
end
|
||||
end
|
||||
|
||||
def put(url, params={})
|
||||
puts "[reposync][PUT] request params: #{params}"
|
||||
conn.put do |req|
|
||||
req.url full_url(url)
|
||||
req.body = params[:data].to_json
|
||||
end
|
||||
end
|
||||
|
||||
def conn
|
||||
@client ||= begin
|
||||
Faraday.new(url: domain) do |req|
|
||||
req.request :url_encoded
|
||||
req.headers['Content-Type'] = 'application/json'
|
||||
req.adapter Faraday.default_adapter
|
||||
req.options.timeout = 100 # open/read timeout in seconds
|
||||
req.options.open_timeout = 10 # connection open timeout in seconds
|
||||
end
|
||||
end
|
||||
|
||||
@client
|
||||
end
|
||||
|
||||
def domain
|
||||
EduSetting.get("reposync_api_domain") || "http://106.75.110.152:50087"
|
||||
end
|
||||
|
||||
def full_url(api_rest, action='post')
|
||||
url = [domain, api_rest].join('').freeze
|
||||
url = action === 'get' ? url : URI.escape(url)
|
||||
url = URI.escape(url) unless url.ascii_only?
|
||||
puts "[reposync] request url: #{url}"
|
||||
return url
|
||||
end
|
||||
|
||||
def log_error(status, body)
|
||||
puts "[reposync] status: #{status}"
|
||||
puts "[reposync] body: #{body}"
|
||||
end
|
||||
|
||||
def render_response(response)
|
||||
status = response.status
|
||||
body = JSON.parse(response&.body)
|
||||
|
||||
log_error(status, body)
|
||||
|
||||
if status == 200
|
||||
if body["code_status"].to_i == 0
|
||||
return [body["code_status"], body["data"], body["msg"]]
|
||||
else
|
||||
puts "[reposync][ERROR] code: #{body["code_status"]}"
|
||||
puts "[reposync][ERROR] message: #{body["msg"]}"
|
||||
return [body["code_status"], body["data"], body["msg"]]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def render_list_response(response)
|
||||
status = response.status
|
||||
body = JSON.parse(response&.body)
|
||||
|
||||
log_error(status, body)
|
||||
|
||||
if status == 200
|
||||
if body["code_status"].to_i == 0
|
||||
return [body["code_status"], body["data"], body["total"], body["msg"]]
|
||||
else
|
||||
puts "[reposync][ERROR] code: #{body["code_status"]}"
|
||||
puts "[reposync][ERROR] message: #{body["msg"]}"
|
||||
return [body["code_status"], body["data"], body["total"], body["msg"]]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
30
app/services/reposync/create_sync_branch_service.rb
Normal file
30
app/services/reposync/create_sync_branch_service.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
class Reposync::CreateSyncBranchService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :internal_branch_name, :external_branch_name, :enable
|
||||
|
||||
def initialize(repo_name, internal_branch_name, external_branch_name, enable=true)
|
||||
@repo_name = repo_name
|
||||
@internal_branch_name = internal_branch_name
|
||||
@external_branch_name = external_branch_name
|
||||
@enable = enable
|
||||
end
|
||||
|
||||
def call
|
||||
result = post(url, request_params)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def request_params
|
||||
Hash.new.merge(data: {
|
||||
internal_branch_name: internal_branch_name,
|
||||
external_branch_name: external_branch_name,
|
||||
enable: enable
|
||||
}.stringify_keys)
|
||||
end
|
||||
|
||||
def url
|
||||
"/cerobot/sync/#{repo_name}/branch".freeze
|
||||
end
|
||||
|
||||
end
|
||||
38
app/services/reposync/create_sync_repo_service.rb
Normal file
38
app/services/reposync/create_sync_repo_service.rb
Normal file
@@ -0,0 +1,38 @@
|
||||
class Reposync::CreateSyncRepoService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :internal_repo_address, :inter_token, :external_repo_address, :exter_token, :sync_granularity, :sync_direction, :enable
|
||||
|
||||
def initialize(repo_name, internal_repo_address, inter_token, external_repo_address, exter_token, sync_granularity, sync_direction, enable=true)
|
||||
@repo_name = repo_name
|
||||
@internal_repo_address = internal_repo_address
|
||||
@inter_token = inter_token
|
||||
@external_repo_address = external_repo_address
|
||||
@exter_token = exter_token
|
||||
@sync_granularity = sync_granularity
|
||||
@sync_direction = sync_direction
|
||||
@enable = enable
|
||||
end
|
||||
|
||||
def call
|
||||
result = post(url, request_params)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def request_params
|
||||
Hash.new.merge(data: {
|
||||
repo_name: repo_name,
|
||||
enable: enable,
|
||||
internal_repo_address: internal_repo_address,
|
||||
inter_token: inter_token,
|
||||
external_repo_address: external_repo_address,
|
||||
exter_token: exter_token,
|
||||
sync_granularity: sync_granularity,
|
||||
sync_direction: sync_direction
|
||||
}.stringify_keys)
|
||||
end
|
||||
|
||||
def url
|
||||
"/cerobot/sync/repo".freeze
|
||||
end
|
||||
end
|
||||
19
app/services/reposync/delete_branch_service.rb
Normal file
19
app/services/reposync/delete_branch_service.rb
Normal file
@@ -0,0 +1,19 @@
|
||||
class Reposync::DeleteBranchService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :branch_name
|
||||
|
||||
def initialize(repo_name, branch_name)
|
||||
@repo_name = repo_name
|
||||
@branch_name = branch_name
|
||||
end
|
||||
|
||||
def call
|
||||
result = delete(url)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def url
|
||||
"/cerobot/sync/#{repo_name}/branch/#{branch_name}"
|
||||
end
|
||||
end
|
||||
18
app/services/reposync/delete_repo_service.rb
Normal file
18
app/services/reposync/delete_repo_service.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
class Reposync::DeleteRepoService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name
|
||||
|
||||
def initialize(repo_name)
|
||||
@repo_name = repo_name
|
||||
end
|
||||
|
||||
def call
|
||||
result = delete(url)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def url
|
||||
"/cerobot/sync/repo/#{repo_name}"
|
||||
end
|
||||
end
|
||||
33
app/services/reposync/get_logs_service.rb
Normal file
33
app/services/reposync/get_logs_service.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
class Reposync::GetLogsService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :branch_id, :page_num, :page_size
|
||||
|
||||
def initialize(repo_name=nil, branch_id=nil, page_num=1, page_size=10)
|
||||
@repo_name = repo_name
|
||||
@branch_id = branch_id
|
||||
@page_num = page_num
|
||||
@page_size = page_size
|
||||
end
|
||||
|
||||
def call
|
||||
result = get(url, request_params)
|
||||
response = render_list_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def request_params
|
||||
params = {
|
||||
page_num: page_num,
|
||||
page_size: page_size,
|
||||
create_sort: true
|
||||
}
|
||||
params.merge!(repo_name: repo_name) if repo_name.present?
|
||||
params.merge!(branch_id: branch_id) if branch_id.present?
|
||||
|
||||
return params.stringify_keys
|
||||
end
|
||||
|
||||
def url
|
||||
"/cerobot/sync/repo/logs"
|
||||
end
|
||||
end
|
||||
30
app/services/reposync/get_sync_branches_service.rb
Normal file
30
app/services/reposync/get_sync_branches_service.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
class Reposync::GetSyncBranchesService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :page, :limit, :create_sort
|
||||
|
||||
def initialize(repo_name, page=1, limit=10, create_sort=false)
|
||||
@repo_name = repo_name
|
||||
@page = page
|
||||
@limit = limit
|
||||
@create_sort = create_sort
|
||||
end
|
||||
|
||||
def call
|
||||
result = get(url, request_params)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def request_params
|
||||
{
|
||||
page: page,
|
||||
limit: limit,
|
||||
create_sort: create_sort
|
||||
}.stringify_keys
|
||||
end
|
||||
|
||||
def url
|
||||
"/cerobot/sync/#{repo_name}/branch".freeze
|
||||
end
|
||||
|
||||
end
|
||||
28
app/services/reposync/get_sync_repos_service.rb
Normal file
28
app/services/reposync/get_sync_repos_service.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
class Reposync::GetSyncReposService < Reposync::ClientService
|
||||
attr_accessor :page, :limit, :create_sort
|
||||
|
||||
def initialize(page=1, limit=10, create_sort=false)
|
||||
@page = page
|
||||
@limit = limit
|
||||
@create_sort = create_sort
|
||||
end
|
||||
|
||||
def call
|
||||
result = get(url, request_params)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def request_params
|
||||
{
|
||||
page: page,
|
||||
limit: limit,
|
||||
create_sort: create_sort
|
||||
}.stringify_keys
|
||||
end
|
||||
|
||||
def url
|
||||
"/cerobot/sync/repo".freeze
|
||||
end
|
||||
|
||||
end
|
||||
22
app/services/reposync/sync_branch_service.rb
Normal file
22
app/services/reposync/sync_branch_service.rb
Normal file
@@ -0,0 +1,22 @@
|
||||
class Reposync::SyncBranchService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :branch_name, :sync_direct
|
||||
|
||||
def initialize(repo_name, branch_name, sync_direct)
|
||||
@repo_name = repo_name
|
||||
@branch_name = branch_name
|
||||
@sync_direct = sync_direct
|
||||
end
|
||||
|
||||
def call
|
||||
result = post(url)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def url
|
||||
"/cerobot/sync/#{repo_name}/branch/#{branch_name}?sync_direct=#{sync_direct}"
|
||||
end
|
||||
|
||||
end
|
||||
18
app/services/reposync/sync_repo_service.rb
Normal file
18
app/services/reposync/sync_repo_service.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
class Reposync::SyncRepoService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name
|
||||
|
||||
def initialize(repo_name)
|
||||
@repo_name = repo_name
|
||||
end
|
||||
|
||||
def call
|
||||
result = post(url)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def url
|
||||
"/cerobot/sync/repo/#{repo_name}"
|
||||
end
|
||||
end
|
||||
21
app/services/reposync/update_branch_status_service.rb
Normal file
21
app/services/reposync/update_branch_status_service.rb
Normal file
@@ -0,0 +1,21 @@
|
||||
class Reposync::UpdateBranchStatusService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :branch_name, :enable
|
||||
|
||||
def initialize(repo_name, branch_name, enable)
|
||||
@repo_name = repo_name
|
||||
@branch_name = branch_name
|
||||
@enable = enable
|
||||
end
|
||||
|
||||
def call
|
||||
result = put(url)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def url
|
||||
"/cerobot/sync/#{repo_name}/branch/#{branch_name}?enable=#{enable}"
|
||||
end
|
||||
end
|
||||
31
app/services/reposync/update_repo_addr_service.rb
Normal file
31
app/services/reposync/update_repo_addr_service.rb
Normal file
@@ -0,0 +1,31 @@
|
||||
class Reposync::UpdateRepoAddrService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :internal_repo_address, :inter_token, :external_repo_address, :exter_token
|
||||
|
||||
def initialize(repo_name, internal_repo_address, inter_token, external_repo_address, exter_token)
|
||||
@repo_name = repo_name
|
||||
@internal_repo_address = internal_repo_address
|
||||
@inter_token = inter_token
|
||||
@external_repo_address = external_repo_address
|
||||
@exter_token = exter_token
|
||||
end
|
||||
|
||||
def call
|
||||
result = put(url, request_params)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def request_params
|
||||
Hash.new.merge(data: {
|
||||
internal_repo_address: internal_repo_address,
|
||||
inter_token: inter_token,
|
||||
external_repo_address: external_repo_address,
|
||||
exter_token: exter_token
|
||||
}.stringify_keys)
|
||||
end
|
||||
|
||||
def url
|
||||
"/cerobot/sync/repo/#{repo_name}/repo_addr".freeze
|
||||
end
|
||||
end
|
||||
19
app/services/reposync/update_repo_status_service.rb
Normal file
19
app/services/reposync/update_repo_status_service.rb
Normal file
@@ -0,0 +1,19 @@
|
||||
class Reposync::UpdateRepoStatusService < Reposync::ClientService
|
||||
|
||||
attr_accessor :repo_name, :enable
|
||||
|
||||
def initialize(repo_name, enable)
|
||||
@repo_name = repo_name
|
||||
@enable = enable
|
||||
end
|
||||
|
||||
def call
|
||||
result = put(url)
|
||||
response = render_response(result)
|
||||
end
|
||||
|
||||
private
|
||||
def url
|
||||
"/cerobot/sync/repo/#{repo_name}?enable=#{enable}".freeze
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user