debian-mirror-gitlab/lib/bulk_imports/common/pipelines/uploads_pipeline.rb

53 lines
1.4 KiB
Ruby
Raw Normal View History

2021-12-11 22:18:48 +05:30
# 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