Prefer polymorphism over specific type checks in Import service
This commit is contained in:
parent
148f40792c
commit
8da236611b
4 changed files with 19 additions and 15 deletions
|
@ -704,10 +704,6 @@ class Project < ActiveRecord::Base
|
|||
import_type == 'gitea'
|
||||
end
|
||||
|
||||
def github_import?
|
||||
import_type == 'github'
|
||||
end
|
||||
|
||||
def check_limit
|
||||
unless creator.can_create_project? || namespace.kind == 'group'
|
||||
projects_limit = creator.projects_limit
|
||||
|
|
|
@ -11,13 +11,11 @@ module Projects
|
|||
# supported by an importer class (`Gitlab::GithubImport::ParallelImporter`
|
||||
# for example).
|
||||
def async?
|
||||
return false unless has_importer?
|
||||
|
||||
!!importer_class.try(:async?)
|
||||
has_importer? && !!importer_class.try(:async?)
|
||||
end
|
||||
|
||||
def execute
|
||||
add_repository_to_project unless project.gitlab_project_import?
|
||||
add_repository_to_project
|
||||
|
||||
import_data
|
||||
|
||||
|
@ -29,6 +27,14 @@ module Projects
|
|||
private
|
||||
|
||||
def add_repository_to_project
|
||||
if project.external_import? && !unknown_url?
|
||||
raise Error, 'Blocked import URL.' if Gitlab::UrlBlocker.blocked_url?(project.import_url)
|
||||
end
|
||||
|
||||
# We should skip the repository for a GitHub import or GitLab project import,
|
||||
# because these importers fetch the project repositories for us.
|
||||
return if has_importer? && importer_class.try(:imports_repository?)
|
||||
|
||||
if unknown_url?
|
||||
# In this case, we only want to import issues, not a repository.
|
||||
create_repository
|
||||
|
@ -44,12 +50,6 @@ module Projects
|
|||
end
|
||||
|
||||
def import_repository
|
||||
raise Error, 'Blocked import URL.' if Gitlab::UrlBlocker.blocked_url?(project.import_url)
|
||||
|
||||
# We should return early for a GitHub import because the new GitHub
|
||||
# importer fetch the project repositories for us.
|
||||
return if project.github_import?
|
||||
|
||||
begin
|
||||
if project.gitea_import?
|
||||
fetch_repository
|
||||
|
@ -88,7 +88,7 @@ module Projects
|
|||
end
|
||||
|
||||
def importer_class
|
||||
Gitlab::ImportSources.importer(project.import_type)
|
||||
@importer_class ||= Gitlab::ImportSources.importer(project.import_type)
|
||||
end
|
||||
|
||||
def has_importer?
|
||||
|
|
|
@ -11,6 +11,10 @@ module Gitlab
|
|||
true
|
||||
end
|
||||
|
||||
def self.imports_repository?
|
||||
true
|
||||
end
|
||||
|
||||
def initialize(project)
|
||||
@project = project
|
||||
end
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
module Gitlab
|
||||
module ImportExport
|
||||
class Importer
|
||||
def self.imports_repository?
|
||||
true
|
||||
end
|
||||
|
||||
def initialize(project)
|
||||
@archive_file = project.import_source
|
||||
@current_user = project.creator
|
||||
|
|
Loading…
Reference in a new issue