diff options
Diffstat (limited to 'app/services/groups/import_export/import_service.rb')
-rw-r--r-- | app/services/groups/import_export/import_service.rb | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/app/services/groups/import_export/import_service.rb b/app/services/groups/import_export/import_service.rb index a0ddc50e5e0..bf3f09f22d4 100644 --- a/app/services/groups/import_export/import_service.rb +++ b/app/services/groups/import_export/import_service.rb @@ -3,7 +3,7 @@ module Groups module ImportExport class ImportService - attr_reader :current_user, :group, :params + attr_reader :current_user, :group, :shared def initialize(group:, user:) @group = group @@ -26,10 +26,10 @@ module Groups end def execute - if valid_user_permissions? && import_file && restorer.restore + if valid_user_permissions? && import_file && restorers.all?(&:restore) notify_success - @group + group else notify_error! end @@ -43,37 +43,41 @@ module Groups def import_file @import_file ||= Gitlab::ImportExport::FileImporter.import( - importable: @group, + importable: group, archive_file: nil, - shared: @shared + shared: shared ) end - def restorer - @restorer ||= + def restorers + [tree_restorer] + end + + def tree_restorer + @tree_restorer ||= if ndjson? Gitlab::ImportExport::Group::TreeRestorer.new( - user: @current_user, - shared: @shared, - group: @group + user: current_user, + shared: shared, + group: group ) else Gitlab::ImportExport::Group::LegacyTreeRestorer.new( - user: @current_user, - shared: @shared, - group: @group, + user: current_user, + shared: shared, + group: group, group_hash: nil ) end end def ndjson? - ::Feature.enabled?(:group_import_ndjson, @group&.parent, default_enabled: true) && - File.exist?(File.join(@shared.export_path, 'tree/groups/_all.ndjson')) + ::Feature.enabled?(:group_import_ndjson, group&.parent, default_enabled: true) && + File.exist?(File.join(shared.export_path, 'tree/groups/_all.ndjson')) end def remove_import_file - upload = @group.import_export_upload + upload = group.import_export_upload return unless upload&.import_file&.file @@ -85,7 +89,7 @@ module Groups if current_user.can?(:admin_group, group) true else - @shared.error(::Gitlab::ImportExport::Error.permission_error(current_user, group)) + shared.error(::Gitlab::ImportExport::Error.permission_error(current_user, group)) false end @@ -93,16 +97,16 @@ module Groups def notify_success @logger.info( - group_id: @group.id, - group_name: @group.name, + group_id: group.id, + group_name: group.name, message: 'Group Import/Export: Import succeeded' ) end def notify_error @logger.error( - group_id: @group.id, - group_name: @group.name, + group_id: group.id, + group_name: group.name, message: "Group Import/Export: Errors occurred, see '#{Gitlab::ErrorTracking::Logger.file_name}' for details" ) end @@ -110,12 +114,14 @@ module Groups def notify_error! notify_error - raise Gitlab::ImportExport::Error.new(@shared.errors.to_sentence) + raise Gitlab::ImportExport::Error.new(shared.errors.to_sentence) end def remove_base_tmp_dir - FileUtils.rm_rf(@shared.base_path) + FileUtils.rm_rf(shared.base_path) end end end end + +Groups::ImportExport::ImportService.prepend_if_ee('EE::Groups::ImportExport::ImportService') |