Commit d075df56d3cfb15a5d11550d86229f5b8001fbe7
1 parent
f45345ed
Exists in
master
and in
4 other branches
Improve perfomance of removeing group
Showing
4 changed files
with
27 additions
and
1 deletions
Show diff stats
app/controllers/admin/groups_controller.rb
@@ -73,6 +73,8 @@ class Admin::GroupsController < AdminController | @@ -73,6 +73,8 @@ class Admin::GroupsController < AdminController | ||
73 | end | 73 | end |
74 | 74 | ||
75 | def destroy | 75 | def destroy |
76 | + @group.truncate_teams | ||
77 | + | ||
76 | @group.destroy | 78 | @group.destroy |
77 | 79 | ||
78 | redirect_to admin_groups_path, notice: 'Group was successfully deleted.' | 80 | redirect_to admin_groups_path, notice: 'Group was successfully deleted.' |
app/models/group.rb
app/models/users_project.rb
@@ -56,6 +56,25 @@ class UsersProject < ActiveRecord::Base | @@ -56,6 +56,25 @@ class UsersProject < ActiveRecord::Base | ||
56 | false | 56 | false |
57 | end | 57 | end |
58 | 58 | ||
59 | + def truncate_teams(project_ids) | ||
60 | + UsersProject.transaction do | ||
61 | + users_projects = UsersProject.where(project_id: project_ids) | ||
62 | + users_projects.each do |users_project| | ||
63 | + users_project.skip_git = true | ||
64 | + users_project.destroy | ||
65 | + end | ||
66 | + Gitlab::Gitolite.new.update_repositories(Project.where(id: project_ids)) | ||
67 | + end | ||
68 | + | ||
69 | + true | ||
70 | + rescue | ||
71 | + false | ||
72 | + end | ||
73 | + | ||
74 | + def truncate_team project | ||
75 | + truncate_teams [project.id] | ||
76 | + end | ||
77 | + | ||
59 | def import_team(source_project, target_project) | 78 | def import_team(source_project, target_project) |
60 | source_team = source_project.users_projects.all | 79 | source_team = source_project.users_projects.all |
61 | target_team = target_project.users_projects.all | 80 | target_team = target_project.users_projects.all |
app/roles/team.rb
@@ -47,7 +47,8 @@ module Team | @@ -47,7 +47,8 @@ module Team | ||
47 | UsersProject.bulk_delete(self, users_ids) | 47 | UsersProject.bulk_delete(self, users_ids) |
48 | end | 48 | end |
49 | 49 | ||
50 | + # Remove all users from project team | ||
50 | def truncate_team | 51 | def truncate_team |
51 | - UsersProject.bulk_delete(self, self.users.map(&:id)) | 52 | + UsersProject.truncate_team(self) |
52 | end | 53 | end |
53 | end | 54 | end |