socialforge/app/services/repositories_service.rb

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