BigW Consortium Gitlab

Commit 1c21cb2b by Nick Thomas Committed by Tiago

Merge branch 'fix/import-uploads-hashed-storage' into 'master'

Fix hashed storage for attachments bugs Closes #40280 See merge request gitlab-org/gitlab-ce!15482 (cherry picked from commit 1da5df70) d3c781f7 add upload saver spec 313bf9cd refactor spec 21357deb fix hashed storage and updated spec d3b0fbb3 add uploads restorer spec dce5909a fix typo ef08a96e add changelog 319dec77 refactor specs 30943bd9 fix spec be945c38 fix spec 0ed17fdc use dynamic_path_segment for path 22219e89 refactor spec
parent 83fa6cb8
---
title: Fix hashed storage for Import/Export uploads
merge_request: 15482
author:
type: fixed
......@@ -24,8 +24,7 @@ module Gitlab
end
def uploads_path
# TODO: decide what to do with uploads. We will use UUIDs here too?
File.join(Rails.root.join('public/uploads'), @project.path_with_namespace)
FileUploader.dynamic_path_segment(@project)
end
end
end
......
require 'spec_helper'
describe Gitlab::ImportExport::UploadsRestorer do
describe 'bundle a project Git repo' do
let(:export_path) { "#{Dir.tmpdir}/uploads_saver_spec" }
let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.full_path) }
let(:uploads_path) { FileUploader.dynamic_path_segment(project) }
before do
allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
FileUtils.mkdir_p(File.join(shared.export_path, 'uploads/random'))
FileUtils.touch(File.join(shared.export_path, 'uploads/random', "dummy.txt"))
end
after do
FileUtils.rm_rf(export_path)
end
describe 'legacy storage' do
let(:project) { create(:project) }
subject(:restorer) { described_class.new(project: project, shared: shared) }
it 'saves the uploads successfully' do
expect(restorer.restore).to be true
end
it 'copies the uploads to the project path' do
restorer.restore
uploads = Dir.glob(File.join(uploads_path, '**/*')).map { |file| File.basename(file) }
expect(uploads).to include('dummy.txt')
end
end
describe 'hashed storage' do
let(:project) { create(:project, :hashed) }
subject(:restorer) { described_class.new(project: project, shared: shared) }
it 'saves the uploads successfully' do
expect(restorer.restore).to be true
end
it 'copies the uploads to the project path' do
restorer.restore
uploads = Dir.glob(File.join(uploads_path, '**/*')).map { |file| File.basename(file) }
expect(uploads).to include('dummy.txt')
end
end
end
end
require 'spec_helper'
describe Gitlab::ImportExport::UploadsSaver do
describe 'bundle a project Git repo' do
let(:export_path) { "#{Dir.tmpdir}/uploads_saver_spec" }
let(:file) { fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') }
let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.full_path) }
before do
allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
end
after do
FileUtils.rm_rf(export_path)
end
describe 'legacy storage' do
let(:project) { create(:project) }
subject(:saver) { described_class.new(shared: shared, project: project) }
before do
UploadService.new(project, file, FileUploader).execute
end
it 'saves the uploads successfully' do
expect(saver.save).to be true
end
it 'copies the uploads to the export path' do
saver.save
uploads = Dir.glob(File.join(shared.export_path, 'uploads', '**/*')).map { |file| File.basename(file) }
expect(uploads).to include('banana_sample.gif')
end
end
describe 'hashed storage' do
let(:project) { create(:project, :hashed) }
subject(:saver) { described_class.new(shared: shared, project: project) }
before do
UploadService.new(project, file, FileUploader).execute
end
it 'saves the uploads successfully' do
expect(saver.save).to be true
end
it 'copies the uploads to the export path' do
saver.save
uploads = Dir.glob(File.join(shared.export_path, 'uploads', '**/*')).map { |file| File.basename(file) }
expect(uploads).to include('banana_sample.gif')
end
end
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment