diff --git a/app/controllers/import/gitlab_projects_controller.rb b/app/controllers/import/gitlab_projects_controller.rb index c99c97893ad59496b9d8afb6f26e705b717cb5d8..0e94915765ce2ff76ee806574d1e7fe037f5e288 100644 --- a/app/controllers/import/gitlab_projects_controller.rb +++ b/app/controllers/import/gitlab_projects_controller.rb @@ -26,7 +26,7 @@ class Import::GitlabProjectsController < Import::BaseController end def create - @file = params[:file] + file = params[:file] # @project_name = repo_owner = current_user.username @@ -34,7 +34,7 @@ class Import::GitlabProjectsController < Import::BaseController namespace = get_or_create_namespace || (render and return) - @project = Gitlab::ImportExport::ImportService.execute(archive_file: file, owner: repo_owner) + @project = Project.create_from_import_job(current_user.id, File.expand_path(file.path)) end private diff --git a/app/models/project.rb b/app/models/project.rb index 0420c6a61aee219421f6ce166cf8b7b9bad1cd8a..18e647045cd5ebb194b2a627c8e631d37a39f0e7 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -359,6 +359,16 @@ class Project < ActiveRecord::Base def visible_to_user(user) where(id: user.authorized_projects.select(:id).reorder(nil)) end + + def create_from_import_job(current_user_id:, tmp_file:) + job_id = ProjectImportWorker.perform_async(current_user_id, tmp_file) + + if job_id + Rails.logger.info "Import job started for #{path_with_namespace} with job ID #{job_id}" + else + Rails.logger.error "Import job failed to start for #{path_with_namespace}" + end + end end def team diff --git a/app/views/import/gitlab_projects/new.html.haml b/app/views/import/gitlab_projects/new.html.haml index 64ea536698dc2e5b6db07fdf2bc99839a6a9203e..9e798b8a63fe1a07b00b180d84578044b5a85cac 100644 --- a/app/views/import/gitlab_projects/new.html.haml +++ b/app/views/import/gitlab_projects/new.html.haml @@ -5,7 +5,7 @@ Import projects from FogBugz %hr -= form_tag status_import_gitlab_project_url, class: 'form-horizontal' do += form_tag import_gitlab_project_path, class: 'form-horizontal' do %p To get started you add your project export file below. .form-group diff --git a/app/workers/project_import_worker.rb b/app/workers/project_import_worker.rb new file mode 100644 index 0000000000000000000000000000000000000000..6dd514b56a0c1e5102e7d510d97acf7f6a50c0e5 --- /dev/null +++ b/app/workers/project_import_worker.rb @@ -0,0 +1,22 @@ +class ProjectImportWorker + include Sidekiq::Worker + include Gitlab::ShellAdapter + + sidekiq_options queue: :gitlab_shell + + def perform(current_user_id, tmp_file) + current_user = User.find(current_user_id) + + project = Gitlab::ImportExport::ImportService.execute(archive_file: tmp_file, owner: current_user) + + # TODO: Move this to import service + # if result[:status] == :error + # project.update(import_error: result[:message]) + # project.import_fail + # return + # end + + project.repository.after_import + project.import_finish + end +end diff --git a/config/routes.rb b/config/routes.rb index 05e89e815009dd30051203a86ff43f13b40a1510..99ce011810447597e46758697c0652eb89a48df5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -159,6 +159,7 @@ Rails.application.routes.draw do resource :gitlab_project, only: [:create, :new], controller: :gitlab_projects do get :status + post :create get :jobs end end