Commit 2f7b67161952fc9ab322eba6878511b5f2dd5cf1
Exists in
master
and in
4 other branches
Merge branch 'master' of github.com:gitlabhq/gitlabhq
Showing
2 changed files
with
30 additions
and
8 deletions
Show diff stats
app/models/key.rb
@@ -21,20 +21,14 @@ class Key < ActiveRecord::Base | @@ -21,20 +21,14 @@ class Key < ActiveRecord::Base | ||
21 | def update_repository | 21 | def update_repository |
22 | Gitlabhq::GitHost.system.new.configure do |c| | 22 | Gitlabhq::GitHost.system.new.configure do |c| |
23 | c.update_keys(identifier, key) | 23 | c.update_keys(identifier, key) |
24 | - | ||
25 | - projects.each do |project| | ||
26 | - c.update_project(project.path, project) | ||
27 | - end | 24 | + c.update_projects(projects) |
28 | end | 25 | end |
29 | end | 26 | end |
30 | 27 | ||
31 | def repository_delete_key | 28 | def repository_delete_key |
32 | Gitlabhq::GitHost.system.new.configure do |c| | 29 | Gitlabhq::GitHost.system.new.configure do |c| |
33 | c.delete_key(identifier) | 30 | c.delete_key(identifier) |
34 | - | ||
35 | - projects.each do |project| | ||
36 | - c.update_project(project.path, project) | ||
37 | - end | 31 | + c.update_projects(projects) |
38 | end | 32 | end |
39 | end | 33 | end |
40 | 34 |
lib/gitlabhq/gitolite.rb
@@ -81,5 +81,33 @@ module Gitlabhq | @@ -81,5 +81,33 @@ module Gitlabhq | ||
81 | 81 | ||
82 | ga_repo.save | 82 | ga_repo.save |
83 | end | 83 | end |
84 | + | ||
85 | + # Updates many projects and uses project.path as the repo path | ||
86 | + # An order of magnitude faster than update_project | ||
87 | + def update_projects(projects) | ||
88 | + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) | ||
89 | + conf = ga_repo.config | ||
90 | + | ||
91 | + projects.each do |project| | ||
92 | + repo_name = project.path | ||
93 | + | ||
94 | + repo = if conf.has_repo?(repo_name) | ||
95 | + conf.get_repo(repo_name) | ||
96 | + else | ||
97 | + ::Gitolite::Config::Repo.new(repo_name) | ||
98 | + end | ||
99 | + | ||
100 | + name_readers = project.repository_readers | ||
101 | + name_writers = project.repository_writers | ||
102 | + | ||
103 | + repo.clean_permissions | ||
104 | + repo.add_permission("R", "", name_readers) unless name_readers.blank? | ||
105 | + repo.add_permission("RW+", "", name_writers) unless name_writers.blank? | ||
106 | + conf.add_repo(repo, true) | ||
107 | + end | ||
108 | + | ||
109 | + ga_repo.save | ||
110 | + end | ||
111 | + | ||
84 | end | 112 | end |
85 | end | 113 | end |