summaryrefslogtreecommitdiff
path: root/lib/gitlab/legacy_github_import/project_creator.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/legacy_github_import/project_creator.rb')
-rw-r--r--lib/gitlab/legacy_github_import/project_creator.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/gitlab/legacy_github_import/project_creator.rb b/lib/gitlab/legacy_github_import/project_creator.rb
new file mode 100644
index 00000000000..41e7eac4d08
--- /dev/null
+++ b/lib/gitlab/legacy_github_import/project_creator.rb
@@ -0,0 +1,52 @@
+module Gitlab
+ module LegacyGithubImport
+ class ProjectCreator
+ include Gitlab::CurrentSettings
+
+ attr_reader :repo, :name, :namespace, :current_user, :session_data, :type
+
+ def initialize(repo, name, namespace, current_user, session_data, type: 'github')
+ @repo = repo
+ @name = name
+ @namespace = namespace
+ @current_user = current_user
+ @session_data = session_data
+ @type = type
+ end
+
+ def execute
+ ::Projects::CreateService.new(
+ current_user,
+ name: name,
+ path: name,
+ description: repo.description,
+ namespace_id: namespace.id,
+ visibility_level: visibility_level,
+ import_type: type,
+ import_source: repo.full_name,
+ import_url: import_url,
+ skip_wiki: skip_wiki
+ ).execute
+ end
+
+ private
+
+ def import_url
+ repo.clone_url.sub('://', "://#{session_data[:github_access_token]}@")
+ end
+
+ def visibility_level
+ repo.private ? Gitlab::VisibilityLevel::PRIVATE : current_application_settings.default_project_visibility
+ end
+
+ #
+ # If the GitHub project repository has wiki, we should not create the
+ # default wiki. Otherwise the GitHub importer will fail because the wiki
+ # repository already exist.
+ #
+ def skip_wiki
+ repo.has_wiki?
+ end
+ end
+ end
+end