debian-mirror-gitlab/app/services/groups/import_export/export_service.rb

82 lines
1.8 KiB
Ruby
Raw Normal View History

2019-12-26 22:10:19 +05:30
# frozen_string_literal: true
module Groups
module ImportExport
class ExportService
def initialize(group:, user:, params: {})
@group = group
@current_user = user
@params = params
@shared = @params[:shared] || Gitlab::ImportExport::Shared.new(@group)
end
def execute
2020-04-08 14:13:33 +05:30
validate_user_permissions
2020-03-13 15:44:24 +05:30
2019-12-26 22:10:19 +05:30
save!
2020-04-08 14:13:33 +05:30
ensure
cleanup
2019-12-26 22:10:19 +05:30
end
private
attr_accessor :shared
2020-04-08 14:13:33 +05:30
def validate_user_permissions
unless @current_user.can?(:admin_group, @group)
@shared.error(::Gitlab::ImportExport::Error.permission_error(@current_user, @group))
notify_error!
end
end
2019-12-26 22:10:19 +05:30
def save!
if savers.all?(&:save)
notify_success
else
2020-04-08 14:13:33 +05:30
notify_error!
2019-12-26 22:10:19 +05:30
end
end
def savers
[tree_exporter, file_saver]
end
def tree_exporter
2020-04-08 14:13:33 +05:30
Gitlab::ImportExport::Group::TreeSaver.new(group: @group, current_user: @current_user, shared: @shared, params: @params)
2019-12-26 22:10:19 +05:30
end
def file_saver
Gitlab::ImportExport::Saver.new(exportable: @group, shared: @shared)
end
2020-04-08 14:13:33 +05:30
def cleanup
FileUtils.rm_rf(shared.archive_path) if shared&.archive_path
2019-12-26 22:10:19 +05:30
end
2020-04-08 14:13:33 +05:30
def notify_error!
notify_error
2019-12-26 22:10:19 +05:30
raise Gitlab::ImportExport::Error.new(shared.errors.to_sentence)
end
def notify_success
@shared.logger.info(
group_id: @group.id,
group_name: @group.name,
message: 'Group Import/Export: Export succeeded'
)
end
def notify_error
@shared.logger.error(
group_id: @group.id,
group_name: @group.name,
error: @shared.errors.join(', '),
message: 'Group Import/Export: Export failed'
)
end
end
end
end