FIX 根据gitea接口更新创建镜像项目api

This commit is contained in:
Jasder 2020-05-18 18:25:01 +08:00
parent e8ac921aa9
commit d464ab3891
6 changed files with 43 additions and 9 deletions

View File

@ -16,7 +16,7 @@ class ProjectsController < ApplicationController
ActiveRecord::Base.transaction do
Projects::CreateForm.new(project_params).validate!
@project = Projects::CreateService.new(current_user, project_params).call
end
rescue Exception => e
uid_logger_error(e.message)
@ -88,7 +88,7 @@ class ProjectsController < ApplicationController
end
def mirror_params
params.permit(:user_id, :name, :description, :repository_name,
:project_category_id, :project_language_id, :clone_addr, :private)
params.permit(:user_id, :name, :description, :repository_name, :is_mirror, :auth_username,
:auth_password, :project_category_id, :project_language_id, :clone_addr, :private)
end
end

View File

@ -2,7 +2,7 @@ class Projects::MigrateForm < BaseForm
REPOSITORY_NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾
URL_REGEX = /\A(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?\z/i
attr_accessor :user_id, :name, :description, :repository_name, :project_category_id, :project_language_id, :clone_addr, :private
attr_accessor :user_id, :name, :description, :repository_name, :project_category_id, :project_language_id, :clone_addr, :private, :is_mirror, :auth_username, :auth_password
validates :user_id, :name, :description,:repository_name, :project_category_id, :project_language_id, presence: true
validates :repository_name, format: { with: REPOSITORY_NAME_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" }

View File

@ -0,0 +1,18 @@
class MigrateRemoteRepositoryJob < ApplicationJob
queue_as :default
def perform(repo, token, params)
gitea_repository = Gitea::Repository::MigrateService.new(token, params).call
sync_project(repo, gitea_repository)
sync_repository(repo, gitea_repository)
end
private
def sync_project(repo, gitea_repository)
repo&.project.update_columns(gpid: gitea_repository["id"], identifier: gitea_repository["name"]) if gitea_repository
end
def sync_repository(repository, gitea_repository)
repository.mirror.update_columns(statuses: Mirror.statuses[:succeeded]) if gitea_repository
end
end

View File

@ -4,7 +4,11 @@ class Project < ApplicationRecord
include Watchable
include ProjectOperable
enum project_type: { mirror: 1, common: 0 } # common:开源托管项目, mirror:开源镜像项目
# common:开源托管项目
# mirror:普通镜像项目,没有定时同步功能
# sync_mirror:同步镜像项目,有系统定时同步功能,且用户可手动同步操作
#
enum project_type: { sync_mirror: 2, mirror: 1, common: 0 }
belongs_to :ignore, optional: true
belongs_to :license, optional: true
@ -122,8 +126,8 @@ class Project < ApplicationRecord
def releases_size(current_user_id, type)
if current_user_id == self.user_id && type.to_s == "all"
self.repository.version_releases_count
else
self.repository.version_releases_count
else
self.repository.version_releases.releases_size
end
end

View File

@ -2,6 +2,7 @@ class Repository < ApplicationRecord
self.inheritance_column = nil # FIX The single-table inheritance mechanism failed
belongs_to :project, :touch => true
belongs_to :user
has_one :mirror, foreign_key: :repo_id
has_many :version_releases, dependent: :destroy
validates :identifier, presence: true
@ -9,4 +10,9 @@ class Repository < ApplicationRecord
def to_param
self.identifier.parameterize
end
# with repository is mirror
def set_mirror!
self.build_mirror(status: Mirror.statuses[:waiting]).save
end
end

View File

@ -31,17 +31,23 @@ class Projects::MigrateService < ApplicationService
project_category_id: params[:project_category_id],
project_language_id: params[:project_language_id],
is_public: project_secretion[:public],
project_type: Project.project_types[:mirror]
project_type: set_project_type
}
end
def set_project_type
ActiveModel::Type::Boolean.new.cast(params[:is_mirror]) == true ? Project.project_types[:sync_mirror] : Project.project_types[:mirror]
end
def repository_params
{
hidden: project_secretion[:hidden],
identifier: params[:repository_name],
mirror_url: params[:clone_addr],
user_id: user.id,
login: user.login
login: params[:auth_username],
password: params[:auth_password],
is_mirror: params[:is_mirror]
}
end