Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2011-12-20 21:36:23 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2011-12-20 21:36:23 +0400
commit2f7b67161952fc9ab322eba6878511b5f2dd5cf1 (patch)
tree4a0aa802e5971bd476b4261ebd44a276d90ea009
parent3d4f524dcb7bc8c3fb10daaf49d1dd8504967706 (diff)
parent6793422e115c9972f966bd43e7cc53ea8f15b103 (diff)
Merge branch 'master' of github.com:gitlabhq/gitlabhq
-rw-r--r--app/models/key.rb10
-rw-r--r--lib/gitlabhq/gitolite.rb28
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