Commit 59ce1af5 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'fix/import-pending-user' into 'master'

Support pending invitation project members importing projects

Adds support for pending invitation project members on Import/Export - previously the import would fail.

Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/19973

- [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- Tests
  - [x] Added for this feature/bug
  - [x] All builds are passing
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [x] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)

See merge request !5683
parents fd3a2cf7 f04e9dad
...@@ -76,6 +76,7 @@ v 8.11.0 (unreleased) ...@@ -76,6 +76,7 @@ v 8.11.0 (unreleased)
- Add description to new_issue email and new_merge_request_email in text/plain content type. !5663 (dixpac) - Add description to new_issue email and new_merge_request_email in text/plain content type. !5663 (dixpac)
- Speed up and reduce memory usage of Commit#repo_changes, Repository#expire_avatar_cache and IrkerWorker - Speed up and reduce memory usage of Commit#repo_changes, Repository#expire_avatar_cache and IrkerWorker
- Add unfold links for Side-by-Side view. !5415 (Tim Masliuchenko) - Add unfold links for Side-by-Side view. !5415 (Tim Masliuchenko)
- Adds support for pending invitation project members importing projects
v 8.10.5 (unreleased) v 8.10.5 (unreleased)
......
...@@ -18,11 +18,14 @@ module Gitlab ...@@ -18,11 +18,14 @@ module Gitlab
@map ||= @map ||=
begin begin
@exported_members.inject(missing_keys_tracking_hash) do |hash, member| @exported_members.inject(missing_keys_tracking_hash) do |hash, member|
existing_user = User.where(find_project_user_query(member)).first if member['user']
old_user_id = member['user']['id'] old_user_id = member['user']['id']
if existing_user && add_user_as_team_member(existing_user, member) existing_user = User.where(find_project_user_query(member)).first
hash[old_user_id] = existing_user.id hash[old_user_id] = existing_user.id if existing_user && add_team_member(member, existing_user)
else
add_team_member(member)
end end
hash hash
end end
end end
...@@ -45,7 +48,7 @@ module Gitlab ...@@ -45,7 +48,7 @@ module Gitlab
ProjectMember.create!(user: @user, access_level: ProjectMember::MASTER, source_id: @project.id, importing: true) ProjectMember.create!(user: @user, access_level: ProjectMember::MASTER, source_id: @project.id, importing: true)
end end
def add_user_as_team_member(existing_user, member) def add_team_member(member, existing_user = nil)
member['user'] = existing_user member['user'] = existing_user
ProjectMember.create(member_hash(member)).persisted? ProjectMember.create(member_hash(member)).persisted?
......
...@@ -26,6 +26,20 @@ describe Gitlab::ImportExport::MembersMapper, services: true do ...@@ -26,6 +26,20 @@ describe Gitlab::ImportExport::MembersMapper, services: true do
"email" => user2.email, "email" => user2.email,
"username" => user2.username "username" => user2.username
} }
},
{
"id" => 3,
"access_level" => 40,
"source_id" => 14,
"source_type" => "Project",
"user_id" => nil,
"notification_level" => 3,
"created_at" => "2016-03-11T10:21:44.822Z",
"updated_at" => "2016-03-11T10:21:44.822Z",
"created_by_id" => 1,
"invite_email" => 'invite@test.com',
"invite_token" => 'token',
"invite_accepted_at" => nil
}] }]
end end
...@@ -47,5 +61,11 @@ describe Gitlab::ImportExport::MembersMapper, services: true do ...@@ -47,5 +61,11 @@ describe Gitlab::ImportExport::MembersMapper, services: true do
expect(members_mapper.missing_author_ids.first).to eq(-1) expect(members_mapper.missing_author_ids.first).to eq(-1)
end end
it 'has invited members with no user' do
members_mapper.map
expect(ProjectMember.find_by_invite_email('invite@test.com')).not_to be_nil
end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment