From d075df56d3cfb15a5d11550d86229f5b8001fbe7 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets 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 54c69138a..90dbda3ee 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -73,6 +73,8 @@ class Admin::GroupsController < AdminController 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 f16c70a68..8ba92980a 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -29,4 +29,8 @@ class Group < Namespace 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 23b83f520..b8aacb329 100644 --- a/app/models/users_project.rb +++ b/app/models/users_project.rb @@ -56,6 +56,25 @@ class UsersProject < ActiveRecord::Base 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 0e4312445..a228e2176 100644 --- a/app/roles/team.rb +++ b/app/roles/team.rb @@ -47,7 +47,8 @@ module Team 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 -- 2.11.0