From d075df56d3cfb15a5d11550d86229f5b8001fbe7 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Date: Sun, 30 Dec 2012 14:26:19 +0200 Subject: [PATCH] Improve perfomance of removeing group --- app/controllers/admin/groups_controller.rb | 2 ++ app/models/group.rb | 4 ++++ app/models/users_project.rb | 19 +++++++++++++++++++ app/roles/team.rb | 3 ++- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index 54c69138a3a58..90dbda3eeeafb 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -73,6 +73,8 @@ def project_teams_update end def destroy + @group.truncate_teams + @group.destroy redirect_to admin_groups_path, notice: 'Group was successfully deleted.' diff --git a/app/models/group.rb b/app/models/group.rb index f16c70a686408..8ba92980a9b2e 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -29,4 +29,8 @@ def users def human_name name end + + def truncate_teams + UsersProject.truncate_teams(project_ids) + end end diff --git a/app/models/users_project.rb b/app/models/users_project.rb index 23b83f5203dac..b8aacb329537a 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -56,6 +56,25 @@ def add_users_into_projects(project_ids, user_ids, project_access) false end + def truncate_teams(project_ids) + UsersProject.transaction do + users_projects = UsersProject.where(project_id: project_ids) + users_projects.each do |users_project| + users_project.skip_git = true + users_project.destroy + end + Gitlab::Gitolite.new.update_repositories(Project.where(id: project_ids)) + end + + true + rescue + false + end + + def truncate_team project + truncate_teams [project.id] + end + def import_team(source_project, target_project) source_team = source_project.users_projects.all target_team = target_project.users_projects.all diff --git a/app/roles/team.rb b/app/roles/team.rb index 0e4312445900c..a228e2176a4c4 100644 --- a/app/roles/team.rb +++ b/app/roles/team.rb @@ -47,7 +47,8 @@ def delete_users_ids_from_team(users_ids) UsersProject.bulk_delete(self, users_ids) end + # Remove all users from project team def truncate_team - UsersProject.bulk_delete(self, self.users.map(&:id)) + UsersProject.truncate_team(self) end end -- GitLab