diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-01-21 16:09:32 -0200 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-01-25 22:58:30 -0200 |
commit | 6dd88e090e94f7f36fafd3e35c35a2868f89eebe (patch) | |
tree | ead0134992cd75ee682338fe0bbfc6dbab8b209d /app/services/projects | |
parent | cae0929a2821fc23585726d98a1552496b96ba05 (diff) | |
download | gitlab-ce-6dd88e090e94f7f36fafd3e35c35a2868f89eebe.tar.gz |
Extract Projects::ImportService service from RepositoryImportWorker
Diffstat (limited to 'app/services/projects')
-rw-r--r-- | app/services/projects/import_service.rb | 71 |
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 |