Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-06-14 13:47:07 +0300
committerJames Lopez <james@jameslopez.es>2016-06-14 13:47:07 +0300
commit3f7ed550110daaec8a76af7146b701dfc0210e60 (patch)
tree25fa93f0c306f8ea2ab9b28f26dfb11bb7551184 /lib/gitlab/import_export/importer.rb
parent1ea44ee75077d67f3f24a288cc44d7c275ba8581 (diff)
lots of refactoring to reuse import service
Diffstat (limited to 'lib/gitlab/import_export/importer.rb')
-rw-r--r--lib/gitlab/import_export/importer.rb78
1 files changed, 64 insertions, 14 deletions
diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb
index 8020aab3da9..d096e17bdf0 100644
--- a/lib/gitlab/import_export/importer.rb
+++ b/lib/gitlab/import_export/importer.rb
@@ -1,29 +1,79 @@
module Gitlab
module ImportExport
class Importer
- include Gitlab::ImportExport::CommandLineUtil
- def self.import(*args)
- new(*args).import
+ def self.execute(*args)
+ new(*args).execute
end
- def initialize(archive_file:, shared:)
- @archive_file = archive_file
- @shared = shared
+ def initialize(project)
+ @archive_file = project.import_source
+ @current_user = project.creator
+ @shared = Gitlab::ImportExport::Shared.new(relative_path: path_with_namespace(@project.path))
end
- def import
- FileUtils.mkdir_p(@shared.export_path)
- decompress_archive
- rescue => e
- @shared.error(e)
- false
+ def execute
+ Gitlab::ImportExport::FileImporter.import(archive_file: @archive_file,
+ shared: @shared)
+ if check_version! && [project_tree, repo_restorer, wiki_restorer, uploads_restorer].all?(&:restore)
+ project_tree.project
+ else
+ project_tree.project.destroy if project_tree.project
+ nil
+ end
end
private
- def decompress_archive
- untar_zxf(archive: @archive_file, dir: @shared.export_path)
+ def check_version!
+ Gitlab::ImportExport::VersionChecker.check!(shared: @shared)
+ end
+
+ def project_tree
+ @project_tree ||= Gitlab::ImportExport::ProjectTreeRestorer.new(user: @current_user,
+ shared: @shared,
+ project: @project)
+ end
+
+ def repo_restorer
+ Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: repo_path,
+ shared: @shared,
+ project: project_tree.project)
+ end
+
+ def wiki_restorer
+ Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: wiki_repo_path,
+ shared: @shared,
+ project: ProjectWiki.new(project_tree.project),
+ wiki: true)
+ end
+
+ def uploads_restorer
+ Gitlab::ImportExport::UploadsRestorer.new(project: project_tree.project, shared: @shared)
+ end
+
+ def path_with_namespace(project_path)
+ File.join(@namespace.path, project_path)
+ end
+
+ def repo_path
+ File.join(@shared.export_path, 'project.bundle')
+ end
+
+ def wiki_repo_path
+ File.join(@shared.export_path, 'project.wiki.bundle')
+ end
+
+ def attributes_for_todo
+ { user_id: @current_user.id,
+ project_id: project_tree.project.id,
+ target_type: 'Project',
+ target: project_tree.project,
+ action: Todo::IMPORTED,
+ author_id: @current_user.id,
+ state: :pending,
+ target_id: project_tree.project.id
+ }
end
end
end