53 lines
1.4 KiB
Ruby
53 lines
1.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module BulkImports
|
||
|
module Common
|
||
|
module Pipelines
|
||
|
class UploadsPipeline
|
||
|
include Pipeline
|
||
|
include Gitlab::ImportExport::CommandLineUtil
|
||
|
|
||
|
FILENAME = 'uploads.tar.gz'
|
||
|
|
||
|
def extract(context)
|
||
|
download_service(tmp_dir, context).execute
|
||
|
untar_zxf(archive: File.join(tmp_dir, FILENAME), dir: tmp_dir)
|
||
|
upload_file_paths = Dir.glob(File.join(tmp_dir, '**', '*'))
|
||
|
|
||
|
BulkImports::Pipeline::ExtractedData.new(data: upload_file_paths)
|
||
|
end
|
||
|
|
||
|
def load(context, file_path)
|
||
|
dynamic_path = FileUploader.extract_dynamic_path(file_path)
|
||
|
|
||
|
return unless dynamic_path
|
||
|
return if File.directory?(file_path)
|
||
|
|
||
|
named_captures = dynamic_path.named_captures.symbolize_keys
|
||
|
|
||
|
UploadService.new(context.portable, File.open(file_path, 'r'), FileUploader, **named_captures).execute
|
||
|
end
|
||
|
|
||
|
def after_run(_)
|
||
|
FileUtils.remove_entry(tmp_dir)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def download_service(tmp_dir, context)
|
||
|
BulkImports::FileDownloadService.new(
|
||
|
configuration: context.configuration,
|
||
|
relative_url: context.entity.relation_download_url_path('uploads'),
|
||
|
dir: tmp_dir,
|
||
|
filename: FILENAME
|
||
|
)
|
||
|
end
|
||
|
|
||
|
def tmp_dir
|
||
|
@tmp_dir ||= Dir.mktmpdir('bulk_imports')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|