You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
5 years ago
|
class Repositories::CreateService < ApplicationService
|
||
|
attr_reader :user, :project, :params
|
||
|
|
||
|
def initialize(user, project, params)
|
||
|
@project = project
|
||
|
@user = user
|
||
|
@params = params
|
||
|
end
|
||
|
|
||
|
def call
|
||
|
@repository = Repository.new(repository_params)
|
||
|
ActiveRecord::Base.transaction do
|
||
|
if @repository.save!
|
||
|
gitea_repository = Gitea::Repository::CreateService.new(user.gitea_token, gitea_repository_params).call
|
||
|
project.update_attributes(gpid: gitea_repository["id"]) if gitea_repository
|
||
|
end
|
||
|
@repository
|
||
|
end
|
||
|
rescue => e
|
||
|
puts "create repository service error: #{e.message}"
|
||
|
raise Error, e.message
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def repository_params
|
||
|
params.merge(project_id: project.id)
|
||
|
end
|
||
|
|
||
|
def gitea_repository_params
|
||
|
hash = {
|
||
|
name: params[:identifier],
|
||
|
private: !params[:hidden]
|
||
|
# "auto_init": true,
|
||
|
# "description": "string",
|
||
|
# "gitignores": "string",
|
||
|
# "issue_labels": "string",
|
||
|
# "license": "string",
|
||
|
# "name": "string",
|
||
|
# "private": true,
|
||
|
# "readme": "string"
|
||
|
}
|
||
|
|
||
|
ignore = project.ignore
|
||
|
license = project.license
|
||
|
hash.merge(license: license.content) if license
|
||
|
hash.merge(gitignores: ignore.content) if ignore
|
||
|
puts "[gitea] create repository params: #{hash}"
|
||
|
hash
|
||
|
end
|
||
|
end
|