##// END OF EJS Templates
scm: git: performance improvements in fetching revisions (#8857, #9472)...
scm: git: performance improvements in fetching revisions (#8857, #9472) Parse a revision for a given branch, just if we haven't parsed it for any branches before. Moved the db check to for existing revisions into a grouped search. Search for many revisions at once: this reduces db load. Revisions are grouped into sets of 100. This is to improve memory consumption. There will be just one query instead of each 100. The above two methods significantly increase parsing speed. Test case was a git repo with 6000+ commits on a master branch, and several other branches originating for master. Speed improved from 1.4h to 18min. Contributed by Gergely Fábián. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9144 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r8941:b3866b05c14b
r9024:999a4ba30d7b
Show More
watchers_controller.rb
110 lines | 3.5 KiB | text/x-ruby | RubyLexer
/ app / controllers / watchers_controller.rb
Jean-Philippe Lang
Cleaner way to handle the replacement of watch links (#8071)....
r5200 # Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/watchers_controller.rb....
r6684 #
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/watchers_controller.rb....
r6684 #
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class WatchersController < ApplicationController
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 before_filter :find_project
before_filter :require_login, :check_project_privacy, :only => [:watch, :unwatch]
Jean-Philippe Lang
Add a permission to remove issue watchers (#2450)....
r2863 before_filter :authorize, :only => [:new, :destroy]
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/watchers_controller.rb....
r6684
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 def watch
Jean-Philippe Lang
Make sure user can not watch what he is not allowed to view....
r3056 if @watched.respond_to?(:visible?) && !@watched.visible?(User.current)
render_403
else
set_watcher(User.current, true)
end
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/watchers_controller.rb....
r6684
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 def unwatch
set_watcher(User.current, false)
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/watchers_controller.rb....
r6684
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 def new
Jean-Philippe Lang
Ability to add non-member users as watchers (#5159)....
r8472 respond_to do |format|
format.js do
render :update do |page|
page.replace_html 'ajax-modal', :partial => 'watchers/new', :locals => {:watched => @watched}
page << "showModal('ajax-modal', '400px');"
Jean-Philippe Lang
Avoid an AJAX query if the watchers form is already loaded....
r8473 page << "$('ajax-modal').addClassName('new-watcher');"
Jean-Philippe Lang
Ability to add non-member users as watchers (#5159)....
r8472 end
end
end
end
def create
if params[:watcher].is_a?(Hash) && request.post?
user_ids = params[:watcher][:user_ids] || [params[:watcher][:user_id]]
user_ids.each do |user_id|
Watcher.create(:watchable => @watched, :user_id => user_id)
end
end
Jean-Philippe Lang
Added watchers for message boards (watchers controller modified to support any watchable model)....
r527 respond_to do |format|
Jean-Philippe Lang
Redirects back after clicking watch/unwatch links without javascript (#1337)....
r1593 format.html { redirect_to :back }
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 format.js do
render :update do |page|
Jean-Philippe Lang
Ability to add non-member users as watchers (#5159)....
r8472 page.replace_html 'ajax-modal', :partial => 'watchers/new', :locals => {:watched => @watched}
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 page.replace_html 'watchers', :partial => 'watchers/watchers', :locals => {:watched => @watched}
end
end
Jean-Philippe Lang
Added watchers for message boards (watchers controller modified to support any watchable model)....
r527 end
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 rescue ::ActionController::RedirectBackError
render :text => 'Watcher added.', :layout => true
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/watchers_controller.rb....
r6684
Jean-Philippe Lang
Add a permission to remove issue watchers (#2450)....
r2863 def destroy
@watched.set_watcher(User.find(params[:user_id]), false) if request.post?
respond_to do |format|
format.html { redirect_to :back }
format.js do
render :update do |page|
page.replace_html 'watchers', :partial => 'watchers/watchers', :locals => {:watched => @watched}
end
end
end
end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/watchers_controller.rb....
r6684
Jean-Philippe Lang
Ability to add non-member users as watchers (#5159)....
r8472 def autocomplete_for_user
@users = User.active.like(params[:q]).find(:all, :limit => 100) - @watched.watcher_users
render :layout => false
end
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 private
def find_project
Jean-Philippe Lang
Added watchers for message boards (watchers controller modified to support any watchable model)....
r527 klass = Object.const_get(params[:object_type].camelcase)
return false unless klass.respond_to?('watched_by')
@watched = klass.find(params[:object_id])
@project = @watched.project
rescue
render_404
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 end
Toshi MARUYAMA
remove trailing white-spaces from app/controllers/watchers_controller.rb....
r6684
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 def set_watcher(user, watching)
@watched.set_watcher(user, watching)
respond_to do |format|
format.html { redirect_to :back }
Eric Davis
Add a second action menu to IssuesController#show. (#4331)...
r3005 format.js do
render(:update) do |page|
Jean-Philippe Lang
Cleaner way to handle the replacement of watch links (#8071)....
r5200 c = watcher_css(@watched)
page.select(".#{c}").each do |item|
page.replace_html item, watcher_link(@watched, user)
Eric Davis
Add a second action menu to IssuesController#show. (#4331)...
r3005 end
end
end
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 end
rescue ::ActionController::RedirectBackError
render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true
end
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 end