summaryrefslogtreecommitdiff
path: root/lib/gitlab/import_export
diff options
context:
space:
mode:
authorBob Van Landuyt <bob@vanlanduyt.co>2018-03-29 15:08:31 +0200
committerBob Van Landuyt <bob@vanlanduyt.co>2018-04-05 09:18:12 +0200
commite3acc982a87d8d694690c928cf5ca792218c1782 (patch)
treea5bb9549d37cf9020f237c9e86572b01f9691bd0 /lib/gitlab/import_export
parente40c0085ef300aca38076af3ea2f227761084038 (diff)
downloadgitlab-ce-e3acc982a87d8d694690c928cf5ca792218c1782.tar.gz
Override values from JSON with import data
This overrides values defined in the project JSON with the values provided in project.import_data.data['override_params']. These could be passed from the API.
Diffstat (limited to 'lib/gitlab/import_export')
-rw-r--r--lib/gitlab/import_export/project_tree_restorer.rb23
1 files changed, 20 insertions, 3 deletions
diff --git a/lib/gitlab/import_export/project_tree_restorer.rb b/lib/gitlab/import_export/project_tree_restorer.rb
index 8f5bb8f9597..fb37e728485 100644
--- a/lib/gitlab/import_export/project_tree_restorer.rb
+++ b/lib/gitlab/import_export/project_tree_restorer.rb
@@ -77,13 +77,13 @@ module Gitlab
end
def default_relation_list
- Gitlab::ImportExport::Reader.new(shared: @shared).tree.reject do |model|
+ reader.tree.reject do |model|
model.is_a?(Hash) && model[:project_members]
end
end
def restore_project
- params = project_params
+ params = project_params.symbolize_keys
if params[:description].present?
params[:description_html] = nil
@@ -94,7 +94,20 @@ module Gitlab
end
def project_params
- @tree_hash.reject do |key, value|
+ @project_params ||= json_params.merge(override_params)
+ end
+
+ def override_params
+ return {} unless params = @project.import_data&.data&.fetch('override_params')
+
+ @override_params ||= params.select do |key, _value|
+ Project.column_names.include?(key.to_s) &&
+ !reader.project_tree[:except].include?(key.to_sym)
+ end
+ end
+
+ def json_params
+ @json_params ||= @tree_hash.reject do |key, value|
# return params that are not 1 to many or 1 to 1 relations
value.respond_to?(:each) && !Project.column_names.include?(key)
end
@@ -181,6 +194,10 @@ module Gitlab
relation_hash.merge(params)
end
+
+ def reader
+ @reader ||= Gitlab::ImportExport::Reader.new(shared: @shared)
+ end
end
end
end