119 lines
5.1 KiB
Ruby
119 lines
5.1 KiB
Ruby
class MirrorsController < ApplicationController
|
|
before_action :check_token
|
|
|
|
def clone
|
|
begin
|
|
path = params[:path]
|
|
image_repo_name = params[:repo_name]
|
|
default_remote_req = params[:ref]
|
|
image_url = params[:image_url]
|
|
|
|
unless File.directory?(path)
|
|
FileUtils.mkdir_p(path)
|
|
end
|
|
|
|
if params[:type_method] == "clone"
|
|
if Dir.exist?("#{path}/#{image_repo_name}")
|
|
|
|
shell_remote_1 = system("cd #{path}/#{image_repo_name} && git remote set-url origin #{image_url}")
|
|
logger.info("shell_remote_1 cd #{path}/#{image_repo_name} && git remote set-url origin #{image_url}: #{shell_remote_1}")
|
|
|
|
shell_clone = system("cd #{path}/#{image_repo_name} && git pull")
|
|
Rails.logger.info("shell_clone cd #{path}/#{image_repo_name} && git pull origin #{default_remote_req}: #{shell_clone}")
|
|
else
|
|
shell_clone = system("cd #{path} && git clone #{image_url}")
|
|
Rails.logger.info("shell_clone cd #{path} && git clone #{image_url}: #{shell_clone}")
|
|
end
|
|
|
|
if shell_clone
|
|
render json: {status: 0, message: "clone_success"}
|
|
elsif !shell_clone && Dir.exist?("#{path}/#{image_repo_name}")
|
|
system("rm -rf #{path}/#{image_repo_name}")
|
|
new_shell_clone = system("cd #{path} && git clone #{image_url}")
|
|
Rails.logger.info("new_shell_clone cd #{path} && git clone #{image_url}: #{new_shell_clone} -- for again")
|
|
if new_shell_clone
|
|
render json: {status: 0, message: "re_clone_success"}
|
|
else
|
|
SyncLog.sync_log("shell_clone: 代码更新失败,请稍后重试,repo_name: #{image_repo_name}")
|
|
render json: {status: -1, message: 'clone_failed'}
|
|
end
|
|
else
|
|
render json: {status: -1, message: 'clone_failed'}
|
|
end
|
|
else
|
|
if Dir.exist?("#{path}/#{image_repo_name}")
|
|
system("rm -rf #{path}/#{image_repo_name}")
|
|
end
|
|
shell = system("cd #{path} && git clone #{image_url}")
|
|
if shell
|
|
render json: {status: 0, message: 'clone_success_refresh'}
|
|
else
|
|
SyncLog.sync_log("shell_clone_2: 代码克隆失败,repo_name: #{image_repo_name}")
|
|
render json: {status: -1, message: 'clone_failed'}
|
|
end
|
|
end
|
|
rescue => e
|
|
SyncLog.sync_log("clone出现错误,错误信息:#{e},repo_name: #{image_repo_name}")
|
|
render json: {status: -1, message: "has_errors: #{e}"}
|
|
end
|
|
|
|
end
|
|
|
|
def push
|
|
begin
|
|
path = params[:path]
|
|
image_repo_name = params[:repo_name]
|
|
g_default_branch = params[:ref]
|
|
image_url = params[:image_url].to_s
|
|
new_gitlab_url = params[:gitlab_url].to_s
|
|
base_url = params[:base_url].to_s
|
|
remote_set_1 = system("cd #{path}/#{image_repo_name} && git remote set-url origin #{new_gitlab_url}")
|
|
Rails.logger.info("remote_set_1 cd #{path}/#{image_repo_name} && git remote set-url origin #{new_gitlab_url}: #{remote_set_1}")
|
|
|
|
# 同步镜像仓库代码(即将从原始仓库拉下来的代码推送到镜像仓库)
|
|
shell = system("cd #{path}/#{image_repo_name} && git checkout #{g_default_branch} && git push -u origin #{g_default_branch}")
|
|
Rails.logger.info("cd #{path}/#{image_repo_name} && git checkout #{g_default_branch} && git push -u origin #{g_default_branch}: #{shell}")
|
|
|
|
if shell
|
|
render json: {status: 0, url: base_url, message: "push_success"}
|
|
else
|
|
shell4 = system("cd #{path}/#{image_repo_name} && git checkout #{g_default_branch} && git push --set-upstream origin #{g_default_branch}")
|
|
Rails.logger.info("cd #{path}/#{image_repo_name} && git checkout #{g_default_branch} && git push --set-upstream origin #{g_default_branch}: #{shell4}")
|
|
if shell4
|
|
render json: {status: 0, url: base_url, message: "push_success"}
|
|
else
|
|
shell5 = system("cd #{path}/#{image_repo_name} && git checkout #{g_default_branch} && git push --force --set-upstream origin #{g_default_branch}")
|
|
Rails.logger.info("cd #{path}/#{image_repo_name} && git checkout #{g_default_branch} && git push --force --set-upstream origin #{g_default_branch}: #{shell5}")
|
|
if shell5
|
|
render json: {status: 0, url: base_url, message: "push_success"}
|
|
else
|
|
SyncLog.sync_log("版本库push异常,请稍后重试,repo_name: #{image_repo_name}")
|
|
render json: {status: -1, message: "push_failed"}
|
|
end
|
|
end
|
|
end
|
|
rescue => e
|
|
SyncLog.sync_log("push出现错误:##########____________#########{e}")
|
|
render json: {status: -1, message: "has_erros: #{e}"}
|
|
end
|
|
|
|
end
|
|
|
|
def delete_repo
|
|
path = params[:path]
|
|
image_repo_name = params[:repo_name]
|
|
if Dir.exist?("#{path}/#{image_repo_name}")
|
|
system("rm -rf #{path}/#{image_repo_name}")
|
|
end
|
|
render json: {status: 1, message: "delete_sucess"}
|
|
end
|
|
|
|
private
|
|
|
|
def check_token
|
|
unless params[:token].present? && params[:token].to_s == "8cc251115a11d7127be4559badb418cd53580ae9524bc666"
|
|
render :json => {status: -1, message: "forbidden"}
|
|
end
|
|
end
|
|
end
|