diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-01-18 22:00:14 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-01-18 22:00:14 +0300 |
commit | 05f0ebba3a2c8ddf39e436f412dc2ab5bf1353b2 (patch) | |
tree | 11d0f2a6ec31c7793c184106cedc2ded3d9a2cc5 /lib/gitlab/import_export | |
parent | ec73467c23693d0db63a797d10194da9e72a74af (diff) |
Add latest changes from gitlab-org/gitlab@15-8-stable-eev15.8.0-rc42
Diffstat (limited to 'lib/gitlab/import_export')
-rw-r--r-- | lib/gitlab/import_export/base/relation_object_saver.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/import_export/error.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/import_export/group/legacy_tree_restorer.rb | 132 | ||||
-rw-r--r-- | lib/gitlab/import_export/group/legacy_tree_saver.rb | 57 | ||||
-rw-r--r-- | lib/gitlab/import_export/project/import_export.yml | 10 | ||||
-rw-r--r-- | lib/gitlab/import_export/version_checker.rb | 2 |
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', |