forked from Gitlink/forgeplus
ADD sync mirror repo api
This commit is contained in:
parent
d464ab3891
commit
0e390ca912
|
@ -1,7 +1,10 @@
|
|||
class RepositoriesController < ApplicationController
|
||||
include ApplicationHelper
|
||||
before_action :require_login, only: %i[edit update create_file update_file delete_file]
|
||||
include OperateProjectAbilityAble
|
||||
before_action :require_login, only: %i[edit update create_file update_file delete_file sync_mirror]
|
||||
before_action :find_project, :authorizate!
|
||||
before_action :find_repository, only: %i[sync_mirror]
|
||||
before_action :authorizate_user_can_edit_project!, only: %i[sync_mirror]
|
||||
|
||||
def show
|
||||
@branches_count = Gitea::Repository::BranchesService.new(@project.owner, @project.identifier).call&.size
|
||||
|
@ -142,6 +145,12 @@ class RepositoriesController < ApplicationController
|
|||
@project.update_attribute(:token, @project.token + uploadPushInfo[:modificationLines].to_i)
|
||||
end
|
||||
|
||||
def sync_mirror
|
||||
@repo&.mirror.set_status!(Mirror.statuses[:waiting])
|
||||
SyncMirroredRepositoryJob(@repo, current_user)
|
||||
render_ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_project
|
||||
|
@ -149,6 +158,10 @@ class RepositoriesController < ApplicationController
|
|||
render_not_found("未找到相关的仓库") unless @project
|
||||
end
|
||||
|
||||
def find_repository
|
||||
@repo = Repository.find params[:id]
|
||||
end
|
||||
|
||||
def authorizate!
|
||||
if @project.repository.hidden? && !@project.member?(current_user)
|
||||
render_forbidden
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
class SyncMirroredRepositoryJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(repo, current_user)
|
||||
result = Gitea::Repository::SyncMirroredService.new(repo.user.login, repo.identifier, token: current_user.gitea_token).call
|
||||
repo&.mirror.set_status! if result[:status] === 200
|
||||
end
|
||||
end
|
|
@ -0,0 +1,13 @@
|
|||
class Mirror < ApplicationRecord
|
||||
|
||||
# 0 - succeeded, 1 - waiting, 2 - failed
|
||||
# 0: 同步镜像成功;1: 正在同步镜像;2: 同步失败,默认值为0
|
||||
enum status: { succeeded: 0, waiting: 1, failed: 2 }
|
||||
|
||||
belongs_to :repository
|
||||
|
||||
|
||||
def set_status!(status=Mirror.statuses[:succeeded])
|
||||
update_column(status: status)
|
||||
end
|
||||
end
|
|
@ -11,9 +11,8 @@ class Repositories::MigrateService < ApplicationService
|
|||
@repository = Repository.new(repository_params)
|
||||
ActiveRecord::Base.transaction do
|
||||
if @repository.save!
|
||||
gitea_repository = Gitea::Repository::MigrateService.new(user.gitea_token, gitea_repository_params).call
|
||||
sync_project(gitea_repository)
|
||||
sync_repository(@repository, gitea_repository)
|
||||
@repository.set_mirror! if wrapper_mirror
|
||||
MigrateRemoteRepositoryJob.perform_later(@repository, user.gitea_token, gitea_repository_params)
|
||||
end
|
||||
@repository
|
||||
end
|
||||
|
@ -23,15 +22,6 @@ class Repositories::MigrateService < ApplicationService
|
|||
end
|
||||
|
||||
private
|
||||
|
||||
def sync_project(gitea_repository)
|
||||
project.update_columns(gpid: gitea_repository["id"], identifier: gitea_repository["name"]) if gitea_repository
|
||||
end
|
||||
|
||||
def sync_repository(repository, gitea_repository)
|
||||
repository.update_columns(url: gitea_repository["clone_url"]) if gitea_repository
|
||||
end
|
||||
|
||||
def repository_params
|
||||
params.merge(project_id: project.id)
|
||||
end
|
||||
|
@ -41,7 +31,14 @@ class Repositories::MigrateService < ApplicationService
|
|||
clone_addr: params[:mirror_url],
|
||||
repo_name: params[:identifier],
|
||||
uid: user.gitea_uid,
|
||||
private: params[:hidden]
|
||||
private: params[:hidden],
|
||||
mirror: wrapper_mirror || false,
|
||||
auth_username: params[:login],
|
||||
auth_password: params[:password]
|
||||
}
|
||||
end
|
||||
|
||||
def wrapper_mirror
|
||||
ActiveModel::Type::Boolean.new.cast(params[:is_mirror])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -193,6 +193,7 @@ Rails.application.routes.draw do
|
|||
put :update_file
|
||||
delete :delete_file
|
||||
post :repo_hook
|
||||
post :sync_mirror
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue