summaryrefslogtreecommitdiff
path: root/app/services/projects/import_service.rb
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-01-21 16:09:32 -0200
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-01-25 22:58:30 -0200
commit6dd88e090e94f7f36fafd3e35c35a2868f89eebe (patch)
treeead0134992cd75ee682338fe0bbfc6dbab8b209d /app/services/projects/import_service.rb
parentcae0929a2821fc23585726d98a1552496b96ba05 (diff)
downloadgitlab-ce-6dd88e090e94f7f36fafd3e35c35a2868f89eebe.tar.gz
Extract Projects::ImportService service from RepositoryImportWorker
Diffstat (limited to 'app/services/projects/import_service.rb')
-rw-r--r--app/services/projects/import_service.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/app/services/projects/import_service.rb b/app/services/projects/import_service.rb
new file mode 100644
index 00000000000..7a9508ef085
--- /dev/null
+++ b/app/services/projects/import_service.rb
@@ -0,0 +1,71 @@
+module Projects
+ class ImportService < BaseService
+ include Gitlab::ShellAdapter
+
+ class Error < StandardError; end
+
+ ALLOWED_TYPES = [
+ 'bitbucket',
+ 'fogbugz',
+ 'gitlab',
+ 'github',
+ 'google_code'
+ ]
+
+ def execute
+ if unknown_url?
+ # In this case, we only want to import issues, not a repository.
+ create_repository
+ else
+ import_repository
+ end
+
+ import_data
+
+ success
+ rescue Error => e
+ error(e.message)
+ end
+
+ private
+
+ def create_repository
+ unless project.create_repository
+ raise Error, 'The repository could not be created.'
+ end
+ end
+
+ def import_repository
+ begin
+ gitlab_shell.import_repository(project.path_with_namespace, project.import_url)
+ rescue Gitlab::Shell::Error => e
+ raise Error, e.message
+ end
+ end
+
+ def import_data
+ return unless has_importer?
+
+ unless importer.execute
+ raise Error, 'The remote data could not be imported.'
+ end
+
+ if project.import_type == 'bitbucket'
+ Gitlab::BitbucketImport::KeyDeleter.new(project).execute
+ end
+ end
+
+ def has_importer?
+ ALLOWED_TYPES.include?(project.import_type)
+ end
+
+ def importer
+ class_name = "Gitlab::#{project.import_type.camelize}Import::Importer"
+ class_name.constantize.new(project)
+ end
+
+ def unknown_url?
+ project.import_url == Project::UNKNOWN_IMPORT_URL
+ end
+ end
+end