45 lines
1.4 KiB
Ruby
45 lines
1.4 KiB
Ruby
#coding=utf-8
|
|
|
|
include RepositoriesHelper
|
|
|
|
class RepositoriesService
|
|
|
|
def createNewRepoBlockchain project, params_repository
|
|
status = -1
|
|
# 判断版本库创建者是否有同名版本库,避免版本库路径一致问题
|
|
unless is_sigle_identifier?(project.user_id, params_repository.first[1]) # first[1]表示identifier
|
|
return status, nil
|
|
else
|
|
attrs = {:attrs => {:identifier => params_repository.first[1]}, :attrs_extra => {}}
|
|
repo = Repository.factory('Git')
|
|
repo.safe_attributes = params_repository
|
|
if attrs[:attrs_extra].keys.any?
|
|
repo.merge_extra_info(attrs[:attrs_extra])
|
|
end
|
|
repo.project = project
|
|
repo.type = 'Repository::Gitlab'
|
|
repo.identifier = repo.identifier.downcase
|
|
repo.url = repo.identifier
|
|
repo.root_url = repo.url
|
|
repo.extra_info = repo.extra_info
|
|
ActiveRecord::Base.transaction do
|
|
begin
|
|
if repo.save!
|
|
s = Trustie::Gitlab::Sync.new
|
|
s.create_project(project, repo)
|
|
raise "sync failed" if project.gpid.blank?
|
|
status = 0
|
|
return status, repo # 表示创建成功
|
|
else
|
|
return status, nil
|
|
end
|
|
rescue Exception => e
|
|
logger.info("create repository #{e.message}")
|
|
raise ActiveRecord::Rollback
|
|
return status, nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
end |