Commit 8fc63d1f authored by Rémy Coutable's avatar Rémy Coutable

Improve Gitlab::ImportSources

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent 99ddd1dc
...@@ -82,7 +82,7 @@ class Import::GithubController < Import::BaseController ...@@ -82,7 +82,7 @@ class Import::GithubController < Import::BaseController
def provider_unauthorized def provider_unauthorized
session[:access_token] = nil session[:access_token] = nil
redirect_to new_import_url, redirect_to new_import_url,
alert: "Access denied to your #{Gitlab::ImportSources.options.key(provider.to_s)} account." alert: "Access denied to your #{Gitlab::ImportSources.title(provider.to_s)} account."
end end
def access_params def access_params
......
...@@ -4,16 +4,6 @@ module Projects ...@@ -4,16 +4,6 @@ module Projects
class Error < StandardError; end class Error < StandardError; end
ALLOWED_TYPES = [
'github',
'bitbucket',
'gitlab',
'google_code',
'fogbugz',
'gitlab_project',
'gitea'
]
def execute def execute
add_repository_to_project unless project.gitlab_project_import? add_repository_to_project unless project.gitlab_project_import?
...@@ -65,29 +55,11 @@ module Projects ...@@ -65,29 +55,11 @@ module Projects
end end
def has_importer? def has_importer?
ALLOWED_TYPES.include?(project.import_type) Gitlab::ImportSources.importer_names.include?(project.import_type)
end end
def importer def importer
return Gitlab::ImportExport::Importer.new(project) if @project.gitlab_project_import? Gitlab::ImportSources.importer(project.import_type).new(project)
class_name =
case project.import_type
when 'github', 'gitea'
Gitlab::GithubImport::Importer
when 'bitbucket'
Gitlab::BitbucketImport::Importer
when 'gitlab'
Gitlab::GitlabImport::Importer
when 'google_code'
Gitlab::GoogleCodeImport::Importer
when 'fogbugz'
Gitlab::FogbugzImport::Importer
else
raise 'Unknown importer type!'
end
class_name.new(project)
end end
def unknown_url? def unknown_url?
......
...@@ -7,22 +7,38 @@ module Gitlab ...@@ -7,22 +7,38 @@ module Gitlab
module ImportSources module ImportSources
extend CurrentSettings extend CurrentSettings
ImportSource = Struct.new(:name, :title, :importer)
ImportTable = [
ImportSource.new('github', 'GitHub', Gitlab::GithubImport::Importer),
ImportSource.new('bitbucket', 'Bitbucket', Gitlab::BitbucketImport::Importer),
ImportSource.new('gitlab', 'GitLab.com', Gitlab::GitlabImport::Importer),
ImportSource.new('google_code', 'Google Code', Gitlab::GoogleCodeImport::Importer),
ImportSource.new('fogbugz', 'FogBugz', Gitlab::FogbugzImport::Importer),
ImportSource.new('git', 'Repo by URL', nil),
ImportSource.new('gitlab_project', 'GitLab export', Gitlab::ImportExport::Importer),
ImportSource.new('gitea', 'Gitea', Gitlab::GithubImport::Importer)
].freeze
class << self class << self
def options
@options ||= Hash[ImportTable.map { |importer| [importer.title, importer.name] }]
end
def values def values
options.values @values ||= ImportTable.map(&:name)
end end
def options def importer_names
{ @importer_names ||= ImportTable.select(&:importer).map(&:name)
'GitHub' => 'github', end
'Bitbucket' => 'bitbucket',
'GitLab.com' => 'gitlab', def importer(name)
'Google Code' => 'google_code', ImportTable.find { |import_source| import_source.name == name }.importer
'FogBugz' => 'fogbugz', end
'Repo by URL' => 'git',
'GitLab export' => 'gitlab_project', def title(name)
'Gitea' => 'gitea' options.key(name)
}
end end
end end
end end
......
require 'spec_helper'
describe Gitlab::ImportSources do
describe '.options' do
it 'returns a hash' do
expected =
{
'GitHub' => 'github',
'Bitbucket' => 'bitbucket',
'GitLab.com' => 'gitlab',
'Google Code' => 'google_code',
'FogBugz' => 'fogbugz',
'Repo by URL' => 'git',
'GitLab export' => 'gitlab_project',
'Gitea' => 'gitea'
}
expect(described_class.options).to eq(expected)
end
end
describe '.values' do
it 'returns an array' do
expected =
[
'github',
'bitbucket',
'gitlab',
'google_code',
'fogbugz',
'git',
'gitlab_project',
'gitea'
]
expect(described_class.values).to eq(expected)
end
end
describe '.importer_names' do
it 'returns an array of importer names' do
expected =
[
'github',
'bitbucket',
'gitlab',
'google_code',
'fogbugz',
'gitlab_project',
'gitea'
]
expect(described_class.importer_names).to eq(expected)
end
end
describe '.importer' do
import_sources = {
'github' => Gitlab::GithubImport::Importer,
'bitbucket' => Gitlab::BitbucketImport::Importer,
'gitlab' => Gitlab::GitlabImport::Importer,
'google_code' => Gitlab::GoogleCodeImport::Importer,
'fogbugz' => Gitlab::FogbugzImport::Importer,
'git' => nil,
'gitlab_project' => Gitlab::ImportExport::Importer,
'gitea' => Gitlab::GithubImport::Importer
}
import_sources.each do |name, klass|
it "returns #{klass} when given #{name}" do
expect(described_class.importer(name)).to eq(klass)
end
end
end
describe '.title' do
import_sources = {
'github' => 'GitHub',
'bitbucket' => 'Bitbucket',
'gitlab' => 'GitLab.com',
'google_code' => 'Google Code',
'fogbugz' => 'FogBugz',
'git' => 'Repo by URL',
'gitlab_project' => 'GitLab export',
'gitea' => 'Gitea'
}
import_sources.each do |name, title|
it "returns #{title} when given #{name}" do
expect(described_class.title(name)).to eq(title)
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment