summaryrefslogtreecommitdiff
path: root/lib/gitlab/import_export/group/group_restorer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/import_export/group/group_restorer.rb')
-rw-r--r--lib/gitlab/import_export/group/group_restorer.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/gitlab/import_export/group/group_restorer.rb b/lib/gitlab/import_export/group/group_restorer.rb
new file mode 100644
index 00000000000..b338950fb71
--- /dev/null
+++ b/lib/gitlab/import_export/group/group_restorer.rb
@@ -0,0 +1,71 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module ImportExport
+ module Group
+ class GroupRestorer
+ def initialize(
+ user:,
+ shared:,
+ group:,
+ attributes:,
+ importable_path:,
+ relation_reader:,
+ reader:
+ )
+ @user = user
+ @shared = shared
+ @group = group
+ @group_attributes = attributes
+ @importable_path = importable_path
+ @relation_reader = relation_reader
+ @reader = reader
+ end
+
+ def restore
+ # consume_relation returns a list of [relation, index]
+ @group_members = @relation_reader
+ .consume_relation(@importable_path, 'members')
+ .map(&:first)
+
+ return unless members_mapper.map
+
+ restorer.restore
+ end
+
+ private
+
+ def restorer
+ @relation_tree_restorer ||= RelationTreeRestorer.new(
+ user: @user,
+ shared: @shared,
+ relation_reader: @relation_reader,
+ members_mapper: members_mapper,
+ object_builder: object_builder,
+ relation_factory: relation_factory,
+ reader: @reader,
+ importable: @group,
+ importable_attributes: @group_attributes,
+ importable_path: @importable_path
+ )
+ end
+
+ def members_mapper
+ @members_mapper ||= Gitlab::ImportExport::MembersMapper.new(
+ exported_members: @group_members,
+ user: @user,
+ importable: @group
+ )
+ end
+
+ def relation_factory
+ Gitlab::ImportExport::Group::RelationFactory
+ end
+
+ def object_builder
+ Gitlab::ImportExport::Group::ObjectBuilder
+ end
+ end
+ end
+ end
+end