From 3a114c2d119a9d0a7a8a9c85a6c7ec405f3a0f12 Mon Sep 17 00:00:00 2001 From: James Lopez Date: Wed, 11 Jul 2018 11:36:59 +0200 Subject: fix specs --- lib/gitlab/import_export/uploads_manager.rb | 6 ++--- lib/gitlab/import_export/uploads_restorer.rb | 13 +++++++--- lib/gitlab/import_export/uploads_saver.rb | 4 +-- .../gitlab/import_export/uploads_manager_spec.rb | 29 +++++++++++++++++++--- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/lib/gitlab/import_export/uploads_manager.rb b/lib/gitlab/import_export/uploads_manager.rb index d47b1f2e8f7..c968deb6b19 100644 --- a/lib/gitlab/import_export/uploads_manager.rb +++ b/lib/gitlab/import_export/uploads_manager.rb @@ -11,7 +11,7 @@ module Gitlab end def save - copy_files(@from, default_uploads_path) if File.directory?(@from) + copy_files(@from, uploads_export_path) if File.directory?(@from) if File.file?(@from) && @relative_export_path == 'avatar' copy_files(@from, File.join(uploads_export_path, @project.avatar.filename)) @@ -29,9 +29,7 @@ module Gitlab Dir["#{uploads_export_path}/**/*"].each do |upload| next if File.directory?(upload) - upload_path = File.join(uploads_export_path, upload) - - UploadService.new(@project, File.open(upload_path, 'r'), FileUploader).execute + UploadService.new(@project, File.open(upload, 'r'), FileUploader).execute end true diff --git a/lib/gitlab/import_export/uploads_restorer.rb b/lib/gitlab/import_export/uploads_restorer.rb index df19354b76e..b7e07fc1226 100644 --- a/lib/gitlab/import_export/uploads_restorer.rb +++ b/lib/gitlab/import_export/uploads_restorer.rb @@ -2,9 +2,16 @@ module Gitlab module ImportExport class UploadsRestorer < UploadsSaver def restore - return true unless File.directory?(uploads_export_path) - - copy_files(uploads_export_path, uploads_path) + if Gitlab::ImportExport.object_storage? + Gitlab::ImportExport::UploadsManager.new( + project: @project, + shared: @shared + ).restore + elsif File.directory?(uploads_export_path) + copy_files(uploads_export_path, uploads_path) + else + true + end rescue => e @shared.error(e) false diff --git a/lib/gitlab/import_export/uploads_saver.rb b/lib/gitlab/import_export/uploads_saver.rb index 9cdd015d82a..b3f17af5661 100644 --- a/lib/gitlab/import_export/uploads_saver.rb +++ b/lib/gitlab/import_export/uploads_saver.rb @@ -11,8 +11,8 @@ module Gitlab def save Gitlab::ImportExport::UploadsManager.new( project: @project, - shared: @shared, - ).copy + shared: @shared + ).save rescue => e @shared.error(e) false diff --git a/spec/lib/gitlab/import_export/uploads_manager_spec.rb b/spec/lib/gitlab/import_export/uploads_manager_spec.rb index 33c90c3a785..ffb8d140f32 100644 --- a/spec/lib/gitlab/import_export/uploads_manager_spec.rb +++ b/spec/lib/gitlab/import_export/uploads_manager_spec.rb @@ -17,7 +17,7 @@ describe Gitlab::ImportExport::UploadsManager do FileUtils.rm_rf(shared.export_path) end - describe '#copy' do + describe '#save' do context 'when the project has uploads locally stored' do let(:upload) { create(:upload, :issuable_upload, :with_file, model: project) } @@ -26,13 +26,15 @@ describe Gitlab::ImportExport::UploadsManager do end it 'does not cause errors' do - manager.copy + manager.save expect(shared.errors).to be_empty end it 'copies the file in the correct location when there is an upload' do - manager.copy + manager.save + + puts exported_file_path expect(File).to exist(exported_file_path) end @@ -52,10 +54,29 @@ describe Gitlab::ImportExport::UploadsManager do expect(fake_uri).to receive(:open).and_return(StringIO.new('File content')) expect(URI).to receive(:parse).and_return(fake_uri) - manager.copy + manager.save expect(File.read(exported_file_path)).to eq('File content') end end + + describe '#restore' do + context 'using object storage' do + before do + stub_feature_flags(import_export_object_storage: true) + stub_uploads_object_storage(FileUploader) + + FileUtils.mkdir_p(File.join(shared.export_path, 'uploads/random')) + FileUtils.touch(File.join(shared.export_path, 'uploads/random', "dummy.txt")) + end + + it 'downloads the file to include in an archive' do + manager.restore + + expect(project.uploads.size).to eq(1) + expect(project.uploads.first.build_uploader.filename).to eq('dummy.txt') + end + end + end end end -- cgit v1.2.1