diff options
Diffstat (limited to 'app/workers/repository_fork_worker.rb')
-rw-r--r-- | app/workers/repository_fork_worker.rb | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/app/workers/repository_fork_worker.rb b/app/workers/repository_fork_worker.rb index 07584fab7c8..5ef9b744db3 100644 --- a/app/workers/repository_fork_worker.rb +++ b/app/workers/repository_fork_worker.rb @@ -1,27 +1,39 @@ +# frozen_string_literal: true + class RepositoryForkWorker include ApplicationWorker include Gitlab::ShellAdapter include ProjectStartImport include ProjectImportOptions - def perform(project_id, forked_from_repository_storage_path, source_disk_path) - project = Project.find(project_id) + def perform(*args) + target_project_id = args.shift + target_project = Project.find(target_project_id) + + source_project = target_project.forked_from_project + unless source_project + return target_project.mark_import_as_failed('Source project cannot be found.') + end + + fork_repository(target_project, source_project.repository_storage, source_project.disk_path) + end + + private - return unless start_fork(project) + def fork_repository(target_project, source_repository_storage_name, source_disk_path) + return unless start_fork(target_project) Gitlab::Metrics.add_event(:fork_repository, source_path: source_disk_path, - target_path: project.disk_path) + target_path: target_project.disk_path) - result = gitlab_shell.fork_repository(forked_from_repository_storage_path, source_disk_path, - project.repository_storage_path, project.disk_path) - raise "Unable to fork project #{project_id} for repository #{source_disk_path} -> #{project.disk_path}" unless result + result = gitlab_shell.fork_repository(source_repository_storage_name, source_disk_path, + target_project.repository_storage, target_project.disk_path) + raise "Unable to fork project #{target_project.id} for repository #{source_disk_path} -> #{target_project.disk_path}" unless result - project.after_import + target_project.after_import end - private - def start_fork(project) return true if start(project) |