diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2011-12-20 19:36:23 +0200 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2011-12-20 19:36:23 +0200 |
commit | 2f7b67161952fc9ab322eba6878511b5f2dd5cf1 (patch) | |
tree | 4a0aa802e5971bd476b4261ebd44a276d90ea009 | |
parent | 3d4f524dcb7bc8c3fb10daaf49d1dd8504967706 (diff) | |
parent | 6793422e115c9972f966bd43e7cc53ea8f15b103 (diff) | |
download | gitlab-ce-2f7b67161952fc9ab322eba6878511b5f2dd5cf1.tar.gz |
Merge branch 'master' of github.com:gitlabhq/gitlabhq
-rw-r--r-- | app/models/key.rb | 10 | ||||
-rw-r--r-- | lib/gitlabhq/gitolite.rb | 28 |
2 files changed, 30 insertions, 8 deletions
diff --git a/app/models/key.rb b/app/models/key.rb index 83e4fc79798..359538d2cbd 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -21,20 +21,14 @@ class Key < ActiveRecord::Base def update_repository Gitlabhq::GitHost.system.new.configure do |c| c.update_keys(identifier, key) - - projects.each do |project| - c.update_project(project.path, project) - end + c.update_projects(projects) end end def repository_delete_key Gitlabhq::GitHost.system.new.configure do |c| c.delete_key(identifier) - - projects.each do |project| - c.update_project(project.path, project) - end + c.update_projects(projects) end end diff --git a/lib/gitlabhq/gitolite.rb b/lib/gitlabhq/gitolite.rb index e79afb55577..0822c25e621 100644 --- a/lib/gitlabhq/gitolite.rb +++ b/lib/gitlabhq/gitolite.rb @@ -81,5 +81,33 @@ module Gitlabhq ga_repo.save end + + # Updates many projects and uses project.path as the repo path + # An order of magnitude faster than update_project + def update_projects(projects) + ga_repo = ::Gitolite::GitoliteAdmin.new(File.join(@local_dir,'gitolite')) + conf = ga_repo.config + + projects.each do |project| + repo_name = project.path + + repo = if conf.has_repo?(repo_name) + conf.get_repo(repo_name) + else + ::Gitolite::Config::Repo.new(repo_name) + end + + name_readers = project.repository_readers + name_writers = project.repository_writers + + repo.clean_permissions + repo.add_permission("R", "", name_readers) unless name_readers.blank? + repo.add_permission("RW+", "", name_writers) unless name_writers.blank? + conf.add_repo(repo, true) + end + + ga_repo.save + end + end end |