diff options
Diffstat (limited to 'lib/bulk_imports/common/pipelines/uploads_pipeline.rb')
-rw-r--r-- | lib/bulk_imports/common/pipelines/uploads_pipeline.rb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/bulk_imports/common/pipelines/uploads_pipeline.rb b/lib/bulk_imports/common/pipelines/uploads_pipeline.rb new file mode 100644 index 00000000000..15e126e1646 --- /dev/null +++ b/lib/bulk_imports/common/pipelines/uploads_pipeline.rb @@ -0,0 +1,52 @@ +# 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 |