From 51487575bca1f4cdce4919bb4cb2bbb1ee686368 Mon Sep 17 00:00:00 2001 From: James Lopez Date: Mon, 16 May 2016 12:39:42 +0200 Subject: [PATCH] added version check on import --- lib/gitlab/import_export/import_service.rb | 6 +++- lib/gitlab/import_export/version_restorer.rb | 36 ++++++++++++++++++++ lib/gitlab/import_export/version_saver.rb | 2 +- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 lib/gitlab/import_export/version_restorer.rb diff --git a/lib/gitlab/import_export/import_service.rb b/lib/gitlab/import_export/import_service.rb index 0c483884fe..b025bff29b 100644 --- a/lib/gitlab/import_export/import_service.rb +++ b/lib/gitlab/import_export/import_service.rb @@ -16,7 +16,7 @@ module Gitlab def execute Gitlab::ImportExport::Importer.import(archive_file: @archive_file, shared: @shared) - if [restore_project_tree, restore_repo, restore_wiki_repo].all? + if [restore_version, restore_project_tree, restore_repo, restore_wiki_repo].all? project_tree.project else project_tree.project.destroy if project_tree.project @@ -26,6 +26,10 @@ module Gitlab private + def restore_version + Gitlab::ImportExport::VersionRestorer.restore(shared: @shared) + end + def restore_project_tree project_tree.restore end diff --git a/lib/gitlab/import_export/version_restorer.rb b/lib/gitlab/import_export/version_restorer.rb new file mode 100644 index 0000000000..797696511d --- /dev/null +++ b/lib/gitlab/import_export/version_restorer.rb @@ -0,0 +1,36 @@ +module Gitlab + module ImportExport + class VersionRestorer + + def self.restore(*args) + new(*args).restore + end + + def initialize(shared:) + @shared = shared + end + + def restore + version = File.open(version_file, &:readline) + verify_version!(version) + rescue => e + @shared.error(e) + false + end + + private + + def version_file + File.join(@shared.export_path, Gitlab::ImportExport.version_filename) + end + + def verify_version!(version) + if Gem::Version.new(version) > Gem::Version.new(Gitlab::ImportExport.VERSION) + raise Gitlab::ImportExport::Error("Import version mismatch: Required <= #{Gitlab::ImportExport.VERSION} but was #{version}") + else + true + end + end + end + end +end diff --git a/lib/gitlab/import_export/version_saver.rb b/lib/gitlab/import_export/version_saver.rb index e8be52b990..197271f355 100644 --- a/lib/gitlab/import_export/version_saver.rb +++ b/lib/gitlab/import_export/version_saver.rb @@ -15,7 +15,7 @@ module Gitlab file.write(Gitlab::ImportExport.VERSION) end rescue => e - @shared.error(e.message) + @shared.error(e) false end