summaryrefslogtreecommitdiff
path: root/lib/gitlab/import_export
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/import_export')
-rw-r--r--lib/gitlab/import_export/base/relation_object_saver.rb2
-rw-r--r--lib/gitlab/import_export/error.rb4
-rw-r--r--lib/gitlab/import_export/group/legacy_tree_restorer.rb132
-rw-r--r--lib/gitlab/import_export/group/legacy_tree_saver.rb57
-rw-r--r--lib/gitlab/import_export/project/import_export.yml10
-rw-r--r--lib/gitlab/import_export/version_checker.rb2
6 files changed, 15 insertions, 192 deletions
diff --git a/lib/gitlab/import_export/base/relation_object_saver.rb b/lib/gitlab/import_export/base/relation_object_saver.rb
index ed3858d0bf4..77b85fc9f15 100644
--- a/lib/gitlab/import_export/base/relation_object_saver.rb
+++ b/lib/gitlab/import_export/base/relation_object_saver.rb
@@ -71,6 +71,8 @@ module Gitlab
invalid_subrelations << invalid_record unless invalid_record.persisted?
end
+
+ relation_object.save
end
end
end
diff --git a/lib/gitlab/import_export/error.rb b/lib/gitlab/import_export/error.rb
index af0026b8864..fa179f584eb 100644
--- a/lib/gitlab/import_export/error.rb
+++ b/lib/gitlab/import_export/error.rb
@@ -17,6 +17,10 @@ module Gitlab
def self.file_compression_error
self.new('File compression/decompression failed')
end
+
+ def self.incompatible_import_file_error
+ self.new('The import file is incompatible')
+ end
end
end
end
diff --git a/lib/gitlab/import_export/group/legacy_tree_restorer.rb b/lib/gitlab/import_export/group/legacy_tree_restorer.rb
deleted file mode 100644
index fa9e765b33a..00000000000
--- a/lib/gitlab/import_export/group/legacy_tree_restorer.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module ImportExport
- module Group
- class LegacyTreeRestorer
- include Gitlab::Utils::StrongMemoize
-
- attr_reader :user
- attr_reader :shared
- attr_reader :group
-
- def initialize(user:, shared:, group:, group_hash:)
- @user = user
- @shared = shared
- @group = group
- @group_hash = group_hash
- end
-
- def restore
- @group_attributes = relation_reader.consume_attributes(nil)
- @group_members = relation_reader.consume_relation(nil, 'members')
- .map(&:first)
-
- # We need to remove `name` and `path` as we did consume it in previous pass
- @group_attributes.delete('name')
- @group_attributes.delete('path')
-
- @children = @group_attributes.delete('children')
-
- if members_mapper.map && restorer.restore
- @children&.each do |group_hash|
- group = create_group(group_hash: group_hash, parent_group: @group)
- shared = Gitlab::ImportExport::Shared.new(group)
-
- self.class.new(
- user: @user,
- shared: shared,
- group: group,
- group_hash: group_hash
- ).restore
- end
- end
-
- return false if @shared.errors.any?
-
- true
- rescue StandardError => e
- @shared.error(e)
- false
- end
-
- private
-
- def relation_reader
- strong_memoize(:relation_reader) do
- if @group_hash.present?
- ImportExport::Json::LegacyReader::Hash.new(
- @group_hash,
- relation_names: reader.group_relation_names)
- else
- ImportExport::Json::LegacyReader::File.new(
- File.join(shared.export_path, 'group.json'),
- relation_names: reader.group_relation_names)
- end
- end
- end
-
- def restorer
- @relation_tree_restorer ||= RelationTreeRestorer.new(
- user: @user,
- shared: @shared,
- relation_reader: relation_reader,
- members_mapper: members_mapper,
- object_builder: object_builder,
- relation_factory: relation_factory,
- reader: reader,
- importable: @group,
- importable_attributes: @group_attributes,
- importable_path: nil
- )
- end
-
- def create_group(group_hash:, parent_group:)
- group_params = {
- name: group_hash['name'],
- path: group_hash['path'],
- parent_id: parent_group&.id,
- visibility_level: sub_group_visibility_level(group_hash, parent_group)
- }
-
- ::Groups::CreateService.new(@user, group_params).execute
- end
-
- def sub_group_visibility_level(group_hash, parent_group)
- original_visibility_level = group_hash['visibility_level'] || Gitlab::VisibilityLevel::PRIVATE
-
- if parent_group && parent_group.visibility_level < original_visibility_level
- Gitlab::VisibilityLevel.closest_allowed_level(parent_group.visibility_level)
- else
- original_visibility_level
- end
- end
-
- def members_mapper
- @members_mapper ||= Gitlab::ImportExport::MembersMapper.new(
- exported_members: @group_members,
- user: @user,
- importable: @group
- )
- end
-
- def relation_factory
- Gitlab::ImportExport::Group::RelationFactory
- end
-
- def object_builder
- Gitlab::ImportExport::Group::ObjectBuilder
- end
-
- def reader
- @reader ||= Gitlab::ImportExport::Reader.new(
- shared: @shared,
- config: Gitlab::ImportExport::Config.new(
- config: Gitlab::ImportExport.legacy_group_config_file
- ).to_h
- )
- end
- end
- end
- end
-end
diff --git a/lib/gitlab/import_export/group/legacy_tree_saver.rb b/lib/gitlab/import_export/group/legacy_tree_saver.rb
deleted file mode 100644
index 0f74fabeac3..00000000000
--- a/lib/gitlab/import_export/group/legacy_tree_saver.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module ImportExport
- module Group
- class LegacyTreeSaver
- attr_reader :full_path, :shared
-
- def initialize(group:, current_user:, shared:, params: {})
- @params = params
- @current_user = current_user
- @shared = shared
- @group = group
- @full_path = File.join(@shared.export_path, ImportExport.group_filename)
- end
-
- def save
- group_tree = serialize(@group, reader.group_tree)
- tree_saver.save(group_tree, @shared.export_path, ImportExport.group_filename)
-
- true
- rescue StandardError => e
- @shared.error(e)
- false
- end
-
- private
-
- def serialize(group, relations_tree)
- group_tree = tree_saver.serialize(group, relations_tree)
-
- group.children.each do |child|
- group_tree['children'] ||= []
- group_tree['children'] << serialize(child, relations_tree)
- end
-
- group_tree
- rescue StandardError => e
- @shared.error(e)
- end
-
- def reader
- @reader ||= Gitlab::ImportExport::Reader.new(
- shared: @shared,
- config: Gitlab::ImportExport::Config.new(
- config: Gitlab::ImportExport.legacy_group_config_file
- ).to_h
- )
- end
-
- def tree_saver
- @tree_saver ||= LegacyRelationTreeSaver.new
- end
- end
- end
- end
-end
diff --git a/lib/gitlab/import_export/project/import_export.yml b/lib/gitlab/import_export/project/import_export.yml
index cc69ed55744..99364996864 100644
--- a/lib/gitlab/import_export/project/import_export.yml
+++ b/lib/gitlab/import_export/project/import_export.yml
@@ -137,6 +137,7 @@ included_attributes:
ci_cd_settings:
- :group_runners_enabled
- :runner_token_expiration_interval
+ - :default_git_depth
metrics_setting:
- :dashboard_timezone
- :external_dashboard_url
@@ -719,7 +720,6 @@ included_attributes:
- :feature_flags_access_level
- :releases_access_level
- :infrastructure_access_level
- - :allow_merge_on_skipped_pipeline
- :auto_devops_deploy_strategy
- :auto_devops_enabled
- :container_registry_enabled
@@ -728,13 +728,14 @@ included_attributes:
- :merge_method
- :merge_requests_enabled
- :snippets_enabled
- - :squash_option
- :topics
- :visibility
- :wiki_enabled
- :build_git_strategy
- :build_enabled
- :security_and_compliance_enabled
+ - :allow_merge_on_skipped_pipeline
+ - :squash_option
resource_milestone_events:
- :user_id
- :action
@@ -776,6 +777,7 @@ excluded_attributes:
- :wiki_page_hooks_integrations
- :deployment_hooks_integrations
- :alert_hooks_integrations
+ - :incident_hooks_integrations
- :mirror
- :runners_token
- :runners_token_encrypted
@@ -1071,6 +1073,9 @@ excluded_attributes:
- :sequence
methods:
+ project:
+ - :allow_merge_on_skipped_pipeline
+ - :squash_option
notes:
- :type
labels:
@@ -1179,6 +1184,7 @@ ee:
- :reject_unsigned_commits
- :commit_committer_check
- :regexp_uses_re2
+ - :reject_non_dco_commits
unprotect_access_levels:
- :access_level
- :user_id
diff --git a/lib/gitlab/import_export/version_checker.rb b/lib/gitlab/import_export/version_checker.rb
index 5ec9db00d0a..ad071a4cbd7 100644
--- a/lib/gitlab/import_export/version_checker.rb
+++ b/lib/gitlab/import_export/version_checker.rb
@@ -34,7 +34,7 @@ module Gitlab
end
def different_version?(version)
- Gem::Version.new(version) != Gem::Version.new(Gitlab::ImportExport.version)
+ Gitlab::VersionInfo.parse(version) != Gitlab::VersionInfo.parse(Gitlab::ImportExport.version)
rescue StandardError => e
Gitlab::Import::Logger.error(
message: 'Import error',