diff --git a/app/services/projects/import_export.rb b/app/services/projects/import_export.rb index f87b10390a5af2c2acc575f54558e5077ea81e35..2fc0d5dd7fe8735a17e0ec6d7b5b150a41af4757 100644 --- a/app/services/projects/import_export.rb +++ b/app/services/projects/import_export.rb @@ -2,8 +2,8 @@ module Projects module ImportExport extend self - def export_path(project_name:) - File.join(storage_path, "#{Time.now.strftime('%Y-%m-%d_%H-%M-%3N')}_gitlab_export_#{project_name}") + def export_path(relative_path:) + File.join(storage_path, "#{Time.now.strftime('%Y-%m-%d_%H-%M-%3N')}_gitlab_export/#{relative_path}") end def project_atts diff --git a/app/services/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb index b3ad278733a538f6867771b83912ea313bb43a0d..99aa8489f65228b044cf4f8c204b19c1826712b1 100644 --- a/app/services/projects/import_export/export_service.rb +++ b/app/services/projects/import_export/export_service.rb @@ -2,7 +2,7 @@ module Projects module ImportExport class ExportService < BaseService def execute(options = {}) - @shared = Projects::ImportExport::Shared.new(project_name: @project_name) + @shared = Projects::ImportExport::Shared.new(relative_path: project.path_with_namespace) save_project_tree bundle_repo end diff --git a/app/services/projects/import_export/repo_bundler.rb b/app/services/projects/import_export/repo_bundler.rb index 27f1d5c87e598ed914efa339b43c1967367034ae..b0b2df1c14cd46eb4051a8632e36f3d5ef7b60c3 100644 --- a/app/services/projects/import_export/repo_bundler.rb +++ b/app/services/projects/import_export/repo_bundler.rb @@ -11,14 +11,15 @@ module Projects end def bundle - return false if project.empty_repo? - @full_path = File.join(export_path, project_filename) + return false if @project.empty_repo? + @full_path = File.join(@export_path, project_filename) bundle_to_disk end private def bundle_to_disk + FileUtils.mkdir_p(@export_path) tar_cf(archive: full_path, dir: path_to_repo) rescue #TODO: handle error @@ -26,7 +27,7 @@ module Projects end def project_filename - @project.path_with_namespace + ".bundle" + "#{@project.namespace}#{@project.name}.bundle" end def path_to_repo diff --git a/app/services/projects/import_export/shared.rb b/app/services/projects/import_export/shared.rb index cdff8b02dd31995c244dca2edbf28268b4f25799..5101f514ab2b9de20e039a8f844417833ba2d59e 100644 --- a/app/services/projects/import_export/shared.rb +++ b/app/services/projects/import_export/shared.rb @@ -6,7 +6,7 @@ module Projects end def export_path - @export_path ||= ImportExport.export_path(project_name: @opts[:project_name]) + @export_path ||= Projects::ImportExport.export_path(relative_path: @opts[:relative_path]) end end end diff --git a/spec/services/projects/import_export/project_tree_saver_spec.rb b/spec/services/projects/import_export/project_tree_saver_spec.rb index 816171ca7e50b42dc629bf489d69b12b443c85b0..1b3568bb7a88e18544ce267ae89b6828b0b26f16 100644 --- a/spec/services/projects/import_export/project_tree_saver_spec.rb +++ b/spec/services/projects/import_export/project_tree_saver_spec.rb @@ -23,12 +23,12 @@ describe Projects::ImportExport::ProjectTreeSaver, services: true do end let!(:milestone) { create(:milestone, title: "Milestone v1.2", project: project) } let(:export_path) { "#{Dir::tmpdir}/project_tree_saver_spec" } - let(:shared) { Projects::ImportExport::Shared.new(project_name: @project_name) } + let(:shared) { Projects::ImportExport::Shared.new(relative_path: project.path_with_namespace) } let(:project_tree_saver) { Projects::ImportExport::ProjectTreeSaver.new(project: project, shared: shared) } before(:each) do project.team << [user, :master] - allow_any_instance_of(Projects::ImportExport::ProjectTreeSaver).to receive(:export_path).and_return(export_path) + allow_any_instance_of(Projects::ImportExport).to receive(:storage_path).and_return(export_path) end after(:each) do diff --git a/spec/services/projects/import_export/repo_bundler_spec.rb b/spec/services/projects/import_export/repo_bundler_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..1f8ed41718f82f6cf8a1c36de9466f9f5b1ae316 --- /dev/null +++ b/spec/services/projects/import_export/repo_bundler_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper' + +describe Projects::ImportExport::RepoBundler, services: true do + describe :bundle do + + let(:user) { create(:user) } + let!(:project) { create(:project, :public, name: 'searchable_project') } + let(:export_path) { "#{Dir::tmpdir}/project_tree_saver_spec" } + let(:shared) { Projects::ImportExport::Shared.new(relative_path: project.path_with_namespace) } + let(:bundler) { Projects::ImportExport::RepoBundler.new(project: project, shared: shared) } + + before(:each) do + project.team << [user, :master] + allow_any_instance_of(Projects::ImportExport).to receive(:storage_path).and_return(export_path) + end + + after(:each) do + FileUtils.rm_rf(export_path) + end + + it 'bundles the repo successfully' do + expect(bundler.bundle).to be true + end + end +end