summaryrefslogtreecommitdiff
path: root/lib/gitlab/import_export/relation_tree_restorer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/import_export/relation_tree_restorer.rb')
-rw-r--r--lib/gitlab/import_export/relation_tree_restorer.rb34
1 files changed, 13 insertions, 21 deletions
diff --git a/lib/gitlab/import_export/relation_tree_restorer.rb b/lib/gitlab/import_export/relation_tree_restorer.rb
index 8359eefc846..466cb03862e 100644
--- a/lib/gitlab/import_export/relation_tree_restorer.rb
+++ b/lib/gitlab/import_export/relation_tree_restorer.rb
@@ -9,13 +9,13 @@ module Gitlab
attr_reader :user
attr_reader :shared
attr_reader :importable
- attr_reader :tree_hash
+ attr_reader :relation_reader
- def initialize(user:, shared:, importable:, tree_hash:, members_mapper:, object_builder:, relation_factory:, reader:)
+ def initialize(user:, shared:, importable:, relation_reader:, members_mapper:, object_builder:, relation_factory:, reader:)
@user = user
@shared = shared
@importable = importable
- @tree_hash = tree_hash
+ @relation_reader = relation_reader
@members_mapper = members_mapper
@object_builder = object_builder
@relation_factory = relation_factory
@@ -30,7 +30,7 @@ module Gitlab
bulk_inserts_enabled = @importable.class == ::Project &&
Feature.enabled?(:import_bulk_inserts, @importable.group)
BulkInsertableAssociations.with_bulk_insert(enabled: bulk_inserts_enabled) do
- update_relation_hashes!
+ fix_ci_pipelines_not_sorted_on_legacy_project_json!
create_relations!
end
end
@@ -57,18 +57,8 @@ module Gitlab
end
def process_relation!(relation_key, relation_definition)
- data_hashes = @tree_hash.delete(relation_key)
- return unless data_hashes
-
- # we do not care if we process array or hash
- data_hashes = [data_hashes] unless data_hashes.is_a?(Array)
-
- relation_index = 0
-
- # consume and remove objects from memory
- while data_hash = data_hashes.shift
+ @relation_reader.consume_relation(relation_key) do |data_hash, relation_index|
process_relation_item!(relation_key, relation_definition, relation_index, data_hash)
- relation_index += 1
end
end
@@ -103,10 +93,7 @@ module Gitlab
end
def update_params!
- params = @tree_hash.reject do |key, _|
- relations.include?(key)
- end
-
+ params = @relation_reader.root_attributes(relations.keys)
params = params.merge(present_override_params)
# Cleaning all imported and overridden params
@@ -223,8 +210,13 @@ module Gitlab
}
end
- def update_relation_hashes!
- @tree_hash['ci_pipelines']&.sort_by! { |hash| hash['id'] }
+ # Temporary fix for https://gitlab.com/gitlab-org/gitlab/-/issues/27883 when import from legacy project.json
+ # This should be removed once legacy JSON format is deprecated.
+ # Ndjson export file will fix the order during project export.
+ def fix_ci_pipelines_not_sorted_on_legacy_project_json!
+ return unless relation_reader.legacy?
+
+ relation_reader.sort_ci_pipelines_by_id
end
end
end