OSDN Git Service

keys to gitolite via sidekiq now
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 28 Jan 2013 19:02:10 +0000 (21:02 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 28 Jan 2013 19:02:10 +0000 (21:02 +0200)
app/observers/key_observer.rb
app/workers/gitolite_worker.rb
lib/gitlab/backend/gitolite.rb

index bf5fa64..44e7864 100644 (file)
@@ -2,11 +2,21 @@ class KeyObserver < ActiveRecord::Observer
   include Gitolited
 
   def after_save(key)
-    gitolite.set_key(key.identifier, key.key, key.projects)
+    GitoliteWorker.perform_async(
+      :set_key,
+      key.identifier,
+      key.key,
+      key.projects.map(&:id)
+    )
   end
 
   def after_destroy(key)
     return if key.is_deploy_key && !key.last_deploy?
-    gitolite.remove_key(key.identifier, key.projects)
+
+    GitoliteWorker.perform_async(
+      :remove_key,
+      key.identifier,
+      key.projects.map(&:id)
+    )
   end
 end
index d134ea0..bff7a8c 100644 (file)
@@ -4,7 +4,7 @@ class GitoliteWorker
 
   sidekiq_options queue: :gitolite
 
-  def perform(action, arg)
-    gitolite.send(action, arg)
+  def perform(action, *arg)
+    gitolite.send(action, *arg)
   end
 end
index 1bcf126..cd9ac15 100644 (file)
@@ -8,14 +8,28 @@ module Gitlab
       Gitlab::GitoliteConfig.new
     end
 
-    def set_key key_id, key_content, projects
+    # Update gitolite config with new key
+    #
+    # Ex.
+    #   set_key("m_gitlab_com_12343", "sha-rsa ...", [2, 3, 6])
+    #
+    def set_key(key_id, key_content, project_ids)
+      projects = Project.where(id: project_ids)
+
       config.apply do |config|
         config.write_key(key_id, key_content)
         config.update_projects(projects)
       end
     end
 
-    def remove_key key_id, projects
+    # Remove ssh key from gitolite config
+    #
+    # Ex.
+    #   remove_key("m_gitlab_com_12343", [2, 3, 6])
+    #
+    def remove_key(key_id, project_ids)
+      projects = Project.where(id: project_ids)
+
       config.apply do |config|
         config.rm_key(key_id)
         config.update_projects(projects)