diff options
Diffstat (limited to 'lib/bulk_imports/clients/http.rb')
-rw-r--r-- | lib/bulk_imports/clients/http.rb | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/lib/bulk_imports/clients/http.rb b/lib/bulk_imports/clients/http.rb index 6c363a3552f..90414a875c6 100644 --- a/lib/bulk_imports/clients/http.rb +++ b/lib/bulk_imports/clients/http.rb @@ -3,6 +3,8 @@ module BulkImports module Clients class HTTP + include Gitlab::Utils::StrongMemoize + API_VERSION = 'v4' DEFAULT_PAGE = 1 DEFAULT_PER_PAGE = 30 @@ -52,24 +54,32 @@ module BulkImports Gitlab::Utils.append_path(api_url, resource) end - def validate_instance_version! - return if @compatible_instance_version + def instance_version + strong_memoize(:instance_version) do + response = with_error_handling do + Gitlab::HTTP.get(resource_url(:version), default_options) + end - response = with_error_handling do - Gitlab::HTTP.get(resource_url(:version), default_options) + Gitlab::VersionInfo.parse(response.parsed_response['version']) end + end + + def compatible_for_project_migration? + instance_version >= BulkImport.min_gl_version_for_project_migration + end - version = Gitlab::VersionInfo.parse(response.parsed_response['version']) + private + + def validate_instance_version! + return if @compatible_instance_version - if version.major < BulkImport::MINIMUM_GITLAB_MAJOR_VERSION + if instance_version.major < BulkImport::MIN_MAJOR_VERSION raise ::BulkImports::Error.unsupported_gitlab_version else @compatible_instance_version = true end end - private - # rubocop:disable GitlabSecurity/PublicSend def request(method, resource, options = {}, &block) validate_instance_version! @@ -113,11 +123,11 @@ module BulkImports def with_error_handling response = yield - raise(::BulkImports::Error, "Error #{response.code}") unless response.success? + raise ::BulkImports::NetworkError.new(response: response) unless response.success? response rescue *Gitlab::HTTP::HTTP_ERRORS => e - raise(::BulkImports::Error, e) + raise ::BulkImports::NetworkError, e end def api_url |