OSDN Git Service

Async perform for add/remove team members
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 28 Jan 2013 15:39:02 +0000 (17:39 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 28 Jan 2013 15:39:02 +0000 (17:39 +0200)
app/models/protected_branch.rb
app/models/users_project.rb
lib/gitlab/backend/gitolite.rb
spec/lib/gitolite_spec.rb
spec/support/stubbed_repository.rb

index 3308caf..2e7010e 100644 (file)
@@ -22,7 +22,7 @@ class ProtectedBranch < ActiveRecord::Base
   after_destroy :update_repository
 
   def update_repository
-    gitolite.update_repository(project)
+    project.update_repository
   end
 
   def commit
index 3206600..183878c 100644 (file)
@@ -82,9 +82,13 @@ class UsersProject < ActiveRecord::Base
             users_project.save
           end
         end
-        Gitlab::Gitolite.new.update_repositories(Project.where(id: project_ids))
       end
 
+      GitoliteWorker.perform_async(
+        :update_repositories,
+        project_ids
+      )
+
       true
     rescue
       false
@@ -97,9 +101,13 @@ class UsersProject < ActiveRecord::Base
           users_project.skip_git = true
           users_project.destroy
         end
-        Gitlab::Gitolite.new.update_repositories(Project.where(id: project_ids))
       end
 
+      GitoliteWorker.perform_async(
+        :update_repositories,
+        project_ids
+      )
+
       true
     rescue
       false
index d026b76..1bcf126 100644 (file)
@@ -22,7 +22,12 @@ module Gitlab
       end
     end
 
-    def update_repository project_id
+    # Update project config in gitolite by project id
+    #
+    # Ex.
+    #   update_repository(23)
+    #
+    def update_repository(project_id)
       project = Project.find(project_id)
       config.update_project!(project)
     end
@@ -45,6 +50,19 @@ module Gitlab
       config.destroy_project!(name)
     end
 
+    # Update projects configs in gitolite by project ids
+    #
+    # Ex.
+    #   update_repositories([1, 4, 6])
+    #
+    def update_repositories(project_ids)
+      projects = Project.where(id: project_ids)
+
+      config.apply do |config|
+        config.update_projects(projects)
+      end
+    end
+
     def url_to_repo path
       Gitlab.config.gitolite.ssh_path_prefix + "#{path}.git"
     end
@@ -53,12 +71,6 @@ module Gitlab
       config.admin_all_repo!
     end
 
-    def update_repositories projects
-      config.apply do |config|
-        config.update_projects(projects)
-      end
-    end
-
     alias_method :create_repository, :update_repository
   end
 end
index 8075b99..df6dc36 100644 (file)
@@ -20,6 +20,6 @@ describe Gitlab::Gitolite do
 
   it "should call config update" do
     gitolite_config.should_receive(:update_project!)
-    gitolite.update_repository project
+    gitolite.update_repository(project.id)
   end
 end
index e6e194d..e092f8a 100644 (file)
@@ -21,6 +21,10 @@ class Project
       true
     end
 
+    def destroy
+      true
+    end
+
     def create
       true
     end