Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/import_export/members_mapper.rb')
-rw-r--r--lib/gitlab/import_export/members_mapper.rb33
1 files changed, 21 insertions, 12 deletions
diff --git a/lib/gitlab/import_export/members_mapper.rb b/lib/gitlab/import_export/members_mapper.rb
index 4e976cfca3a..d2e27388b51 100644
--- a/lib/gitlab/import_export/members_mapper.rb
+++ b/lib/gitlab/import_export/members_mapper.rb
@@ -3,10 +3,10 @@
module Gitlab
module ImportExport
class MembersMapper
- def initialize(exported_members:, user:, project:)
+ def initialize(exported_members:, user:, importable:)
@exported_members = user.admin? ? exported_members : []
@user = user
- @project = project
+ @importable = importable
# This needs to run first, as second call would be from #map
# which means project members already exist.
@@ -19,7 +19,7 @@ module Gitlab
@exported_members.inject(missing_keys_tracking_hash) do |hash, member|
if member['user']
old_user_id = member['user']['id']
- existing_user = User.where(find_project_user_query(member)).first
+ existing_user = User.where(find_user_query(member)).first
hash[old_user_id] = existing_user.id if existing_user && add_team_member(member, existing_user)
else
add_team_member(member)
@@ -47,39 +47,48 @@ module Gitlab
end
def ensure_default_member!
- @project.project_members.destroy_all # rubocop: disable DestroyAll
+ @importable.members.destroy_all # rubocop: disable DestroyAll
- ProjectMember.create!(user: @user, access_level: ProjectMember::MAINTAINER, source_id: @project.id, importing: true)
+ relation_class.create!(user: @user, access_level: relation_class::MAINTAINER, source_id: @importable.id, importing: true)
rescue => e
- raise e, "Error adding importer user to project members. #{e.message}"
+ raise e, "Error adding importer user to #{@importable.class} members. #{e.message}"
end
def add_team_member(member, existing_user = nil)
member['user'] = existing_user
- ProjectMember.create(member_hash(member)).persisted?
+ relation_class.create(member_hash(member)).persisted?
end
def member_hash(member)
parsed_hash(member).merge(
- 'source_id' => @project.id,
+ 'source_id' => @importable.id,
'importing' => true,
- 'access_level' => [member['access_level'], ProjectMember::MAINTAINER].min
+ 'access_level' => [member['access_level'], relation_class::MAINTAINER].min
).except('user_id')
end
def parsed_hash(member)
- Gitlab::ImportExport::AttributeCleaner.clean(relation_hash: member.deep_stringify_keys,
- relation_class: ProjectMember)
+ Gitlab::ImportExport::AttributeCleaner.clean(relation_hash: member.deep_stringify_keys,
+ relation_class: relation_class)
end
- def find_project_user_query(member)
+ def find_user_query(member)
user_arel[:email].eq(member['user']['email']).or(user_arel[:username].eq(member['user']['username']))
end
def user_arel
@user_arel ||= User.arel_table
end
+
+ def relation_class
+ case @importable
+ when Project
+ ProjectMember
+ when Group
+ GroupMember
+ end
+ end
end
end
end