589b2db06c
This sets up all the basics for importing Phabricator tasks into GitLab issues. To import all tasks from a Phabricator instance into GitLab, we'll import all of them into a new project that will have its repository disabled. The import is hooked into a regular ProjectImport setup, but similar to the GitHub parallel importer takes care of all the imports itself. In this iteration, we're importing each page of tasks in a separate sidekiq job. The first thing we do when requesting a new page of tasks is schedule the next page to be imported. But to avoid deadlocks, we only allow a single job per worker type to run at the same time. For now we're only importing basic Issue information, this should be extended to richer information.
44 lines
851 B
Ruby
44 lines
851 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module PhabricatorImport
|
|
class Importer
|
|
def self.async?
|
|
true
|
|
end
|
|
|
|
def self.imports_repository?
|
|
# This does not really import a repository, but we want to skip all
|
|
# repository related tasks in the `Projects::ImportService`
|
|
true
|
|
end
|
|
|
|
def initialize(project)
|
|
@project = project
|
|
end
|
|
|
|
def execute
|
|
Gitlab::Import::SetAsyncJid.set_jid(project)
|
|
schedule_first_tasks_page
|
|
|
|
true
|
|
rescue => e
|
|
fail_import(e.message)
|
|
|
|
false
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :project
|
|
|
|
def schedule_first_tasks_page
|
|
ImportTasksWorker.schedule(project.id)
|
|
end
|
|
|
|
def fail_import(message)
|
|
project.import_state.mark_as_failed(message)
|
|
end
|
|
end
|
|
end
|
|
end
|