summaryrefslogtreecommitdiff
path: root/lib/gitlab/import_export
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-06-01 18:03:51 +0200
committerJames Lopez <james@jameslopez.es>2016-06-01 18:03:51 +0200
commit7c8359b7441c2631ceec3bd3783a9761646a9f99 (patch)
treef684e27f73b13e2322cc80e91a1b0f6ac7d1b4a4 /lib/gitlab/import_export
parent6782cd3cf6bd298c0c26538db35704bf13fcabb3 (diff)
downloadgitlab-ce-7c8359b7441c2631ceec3bd3783a9761646a9f99.tar.gz
started refactoring some stuff based on MR feedback
Diffstat (limited to 'lib/gitlab/import_export')
-rw-r--r--lib/gitlab/import_export/members_mapper.rb34
-rw-r--r--lib/gitlab/import_export/project_tree_restorer.rb34
-rw-r--r--lib/gitlab/import_export/relation_factory.rb17
-rw-r--r--lib/gitlab/import_export/repo_restorer.rb1
4 files changed, 37 insertions, 49 deletions
diff --git a/lib/gitlab/import_export/members_mapper.rb b/lib/gitlab/import_export/members_mapper.rb
index cd1e174f180..9c47216eb8d 100644
--- a/lib/gitlab/import_export/members_mapper.rb
+++ b/lib/gitlab/import_export/members_mapper.rb
@@ -2,7 +2,7 @@ module Gitlab
module ImportExport
class MembersMapper
- attr_reader :map, :note_member_list
+ attr_reader :note_member_list
def initialize(exported_members:, user:, project:)
@exported_members = exported_members
@@ -19,33 +19,37 @@ module Gitlab
default_project_member
end
- @map = generate_map
end
def default_project_member
@default_project_member ||=
begin
default_member = ProjectMember.new(default_project_member_hash)
- default_member.save!
+ default_member.create!
default_member.user.id
end
end
- private
-
- def generate_map
- @exported_members.each do |member|
- existing_user = User.where(find_project_user_query(member)).first
- assign_member(existing_user, member) if existing_user
- end
- @project_member_map
+ def map
+ @map ||=
+ begin
+ @exported_members.inject(@project_member_map) do |hash, member|
+ existing_user = User.where(find_project_user_query(member)).first
+ if existing_user
+ old_user_id = member['user']['id']
+ add_user_as_team_member(existing_user, member)
+ hash[old_user_id] = existing_user.id
+ end
+ hash
+ end
+ end
end
- def assign_member(existing_user, member)
- old_user_id = member['user']['id']
+ private
+
+ def add_user_as_team_member(existing_user, member)
member['user'] = existing_user
- project_member = ProjectMember.new(member_hash(member))
- @project_member_map[old_user_id] = project_member.user.id if project_member.save
+ ProjectMember.create!(member_hash(member))
end
def member_hash(member)
diff --git a/lib/gitlab/import_export/project_tree_restorer.rb b/lib/gitlab/import_export/project_tree_restorer.rb
index 911ba06e748..e8f5fb88382 100644
--- a/lib/gitlab/import_export/project_tree_restorer.rb
+++ b/lib/gitlab/import_export/project_tree_restorer.rb
@@ -32,14 +32,15 @@ module Gitlab
project: project)
end
- def create_relations(relation_list = default_relation_list, tree_hash = @tree_hash)
+ def create_relations
saved = []
- relation_list.each do |relation|
- next if !relation.is_a?(Hash) && tree_hash[relation.to_s].blank?
- create_sub_relations(relation, tree_hash) if relation.is_a?(Hash)
+ default_relation_list.each do |relation|
+ next unless relation.is_a?(Hash) || @tree_hash[relation.to_s].present?
+
+ create_sub_relations(relation, @tree_hash) if relation.is_a?(Hash)
relation_key = relation.is_a?(Hash) ? relation.keys.first : relation
- relation_hash = create_relation(relation_key, tree_hash[relation_key.to_s])
+ relation_hash = create_relation(relation_key, @tree_hash[relation_key.to_s])
saved << project.update_attribute(relation_key, relation_hash)
end
saved.all?
@@ -73,32 +74,19 @@ module Gitlab
relation_hash = relation_item[sub_relation.to_s]
end
- process_sub_relation(relation_hash, relation_item, sub_relation) unless relation_hash.blank?
+ relation_item[sub_relation.to_s] = create_relation(sub_relation, relation_hash) unless relation_hash.blank?
end
end
end
- def process_sub_relation(relation_hash, relation_item, sub_relation)
- if relation_hash.is_a?(Array)
- sub_relation_object = create_relation(sub_relation, relation_hash)
- else
- sub_relation_object = relation_from_factory(sub_relation, relation_hash)
- end
- relation_item[sub_relation.to_s] = sub_relation_object
- end
-
def create_relation(relation, relation_hash_list)
[relation_hash_list].flatten.map do |relation_hash|
- relation_from_factory(relation, relation_hash)
+ Gitlab::ImportExport::RelationFactory.create(relation_sym: relation.to_sym,
+ relation_hash: relation_hash.merge('project_id' => project.id),
+ members_mapper: members_mapper,
+ user_admin: @user.is_admin?)
end
end
-
- def relation_from_factory(relation, relation_hash)
- Gitlab::ImportExport::RelationFactory.create(relation_sym: relation.to_sym,
- relation_hash: relation_hash.merge('project_id' => project.id),
- members_mapper: members_mapper,
- user_admin: @user.is_admin?)
- end
end
end
end
diff --git a/lib/gitlab/import_export/relation_factory.rb b/lib/gitlab/import_export/relation_factory.rb
index 0fdf208cfa0..2794eafe4b6 100644
--- a/lib/gitlab/import_export/relation_factory.rb
+++ b/lib/gitlab/import_export/relation_factory.rb
@@ -11,11 +11,14 @@ module Gitlab
builds: 'Ci::Build',
hooks: 'ProjectHook' }.freeze
- USER_REFERENCES = %w(author_id assignee_id updated_by_id user_id).freeze
+ USER_REFERENCES = %w[author_id assignee_id updated_by_id user_id].freeze
+ # Guesses a model and saves it to the DB given its name `relation_sym`
def create(relation_sym:, relation_hash:, members_mapper:, user_admin:)
relation_sym = parse_relation_sym(relation_sym)
- klass = parse_relation(relation_hash, relation_sym)
+
+ klass = relation_class(relation_sym)
+ relation_hash.delete('id')
update_missing_author(relation_hash, members_mapper, user_admin) if relation_sym == :notes
update_user_references(relation_hash, members_mapper.map)
@@ -49,8 +52,8 @@ module Gitlab
return unless user_admin && members_map.note_member_list.include?(old_author_id)
- relation_hash['note'] = ('*Blank note*') if relation_hash['note'].blank?
- relation_hash['note'] += (missing_author_note(relation_hash['updated_at'], author['name']))
+ relation_hash['note'] = '*Blank note*' if relation_hash['note'].blank?
+ relation_hash['note'] += missing_author_note(relation_hash['updated_at'], author['name'])
end
def missing_author_note(updated_at, author_name)
@@ -109,12 +112,6 @@ module Gitlab
imported_object.importing = true if imported_object.respond_to?(:importing)
imported_object
end
-
- def parse_relation(relation_hash, relation_sym)
- klass = relation_class(relation_sym)
- relation_hash.delete('id')
- klass
- end
end
end
end
diff --git a/lib/gitlab/import_export/repo_restorer.rb b/lib/gitlab/import_export/repo_restorer.rb
index 36094b95aa4..9fac58e2242 100644
--- a/lib/gitlab/import_export/repo_restorer.rb
+++ b/lib/gitlab/import_export/repo_restorer.rb
@@ -12,7 +12,6 @@ module Gitlab
def restore
return true unless File.exists?(@path_to_bundle)
- FileUtils.mkdir_p(repos_path)
FileUtils.mkdir_p(path_to_repo)
git_unbundle(repo_path: path_to_repo, bundle_path: @path_to_bundle)