mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-03 11:50:49 +08:00
init project
This commit is contained in:
38
app/services/projects/fork_service.rb
Normal file
38
app/services/projects/fork_service.rb
Normal file
@@ -0,0 +1,38 @@
|
||||
class Projects::ForkService < ApplicationService
|
||||
attr_reader :target_owner, :project, :organization
|
||||
|
||||
def initialize(target_owner, project, organization=nil)
|
||||
@target_owner = target_owner
|
||||
@project = project
|
||||
@organization = organization
|
||||
end
|
||||
|
||||
def call
|
||||
ActiveRecord::Base.transaction do
|
||||
clone_project =
|
||||
@project.deep_clone include: :repository,
|
||||
only: [:name, :description,:is_public, :identifier,
|
||||
:rep_identifier, :project_category_id, :project_language_id,
|
||||
:license_id, :ignore_id, {repository: [:identifier, :hidden]}]
|
||||
|
||||
clone_project.owner = @target_owner
|
||||
clone_project.forked_from_project_id = @project.id
|
||||
clone_project.save!
|
||||
|
||||
new_repository = clone_project.repository
|
||||
new_repository.user = @target_owner
|
||||
new_repository.save!
|
||||
|
||||
result = Gitea::Repository::ForkService.new(@project.owner, @target_owner, @project.identifier, @organization).call
|
||||
|
||||
@project.update_column('forked_count', @project.forked_count + 1)
|
||||
new_repository.update_column('url', result['clone_url']) if result
|
||||
|
||||
clone_project
|
||||
end
|
||||
rescue => e
|
||||
puts "clone project service error: #{e.message}"
|
||||
raise Error, e.message
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user