ihub_server/app/controllers/mirrors_controller.rb

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