diff --git a/app/services/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb index e6eb6f915b0..0691ca9d468 100644 --- a/app/services/projects/import_export/export_service.rb +++ b/app/services/projects/import_export/export_service.rb @@ -4,12 +4,16 @@ module Projects def execute(options = {}) @shared = Gitlab::ImportExport::Shared.new(relative_path: File.join(project.path_with_namespace, 'work')) - save_all if [save_project_tree, bundle_repo, bundle_wiki_repo].all? - notify_worker if @shared.errors.any? + save_all if [save_version, save_project_tree, bundle_repo, bundle_wiki_repo].all? + cleanup_and_notify_worker if @shared.errors.any? end private + def save_version + Gitlab::ImportExport::VersionSaver.save(shared: @shared) + end + def save_project_tree Gitlab::ImportExport::ProjectTreeSaver.new(project: project, shared: @shared).save end @@ -26,7 +30,8 @@ module Projects Gitlab::ImportExport::Saver.save(shared: @shared) end - def notify_worker + def cleanup_and_notify_worker + FileUtils.rm_rf(@shared.export_path) raise Gitlab::ImportExport::Error.new(@shared.errors.join(', ')) end end diff --git a/lib/gitlab/import_export.rb b/lib/gitlab/import_export.rb index bf80ac7f093..9c7c72e2b4a 100644 --- a/lib/gitlab/import_export.rb +++ b/lib/gitlab/import_export.rb @@ -2,6 +2,8 @@ module Gitlab module ImportExport extend self + VERSION = '0.1.0' + def export_path(relative_path:) File.join(storage_path, relative_path) end @@ -17,5 +19,9 @@ module Gitlab def project_bundle_filename "project.bundle" end + + def version_filename + 'VERSION' + end end end diff --git a/lib/gitlab/import_export/version_saver.rb b/lib/gitlab/import_export/version_saver.rb new file mode 100644 index 00000000000..e8be52b990f --- /dev/null +++ b/lib/gitlab/import_export/version_saver.rb @@ -0,0 +1,29 @@ +module Gitlab + module ImportExport + class VersionSaver + + def self.save(*args) + new(*args).save + end + + def initialize(shared:) + @shared = shared + end + + def save + File.open(version_file, 'w') do |file| + file.write(Gitlab::ImportExport.VERSION) + end + rescue => e + @shared.error(e.message) + false + end + + private + + def version_file + File.join(@shared.export_path, Gitlab::ImportExport.version_filename) + end + end + end +end