##// 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:

r7316:2d541a7e1b23
r9024:999a4ba30d7b
Show More
issue_status.rb
104 lines | 3.6 KiB | text/x-ruby | RubyLexer
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384 # Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 #
# 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/models/issue_status.rb....
r6384 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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/models/issue_status.rb....
r6384 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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 IssueStatus < ActiveRecord::Base
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384 before_destroy :check_integrity
Jean-Philippe Lang
Fixed: Deleting statuses doesn't delete all workflow entries (#5811)....
r3767 has_many :workflows, :foreign_key => "old_status_id"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 acts_as_list
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384
Jean-Philippe Lang
Fixed: Deleting statuses doesn't delete all workflow entries (#5811)....
r3767 before_destroy :delete_workflows
Toshi MARUYAMA
Rails3: model: replace deprecated 'after_save' method at IssueStatus model...
r7316 after_save :update_default
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
validates_presence_of :name
validates_uniqueness_of :name
Jean-Philippe Lang
Added several validates_length_of...
r590 validates_length_of :name, :maximum => 30
Jean-Philippe Lang
Allow blank value for IssueStatus#default_done_ratio....
r3043 validates_inclusion_of :default_done_ratio, :in => 0..100, :allow_nil => true
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384
Jean-Philippe Lang
Fixed: Setting issue attributes from mail should be case-insensitive (#8759)....
r6079 named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}}
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Toshi MARUYAMA
Rails3: model: replace deprecated 'after_save' method at IssueStatus model...
r7316 def update_default
Jean-Philippe Lang
Fixed: the default status is lost when reordering issue statuses (#1955)....
r1909 IssueStatus.update_all("is_default=#{connection.quoted_false}", ['id <> ?', id]) if self.is_default?
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # Returns the default status for new issues
def self.default
find(:first, :conditions =>["is_default=?", true])
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384
Eric Davis
Adds a Setting to control how an Issue's done_ratio is calculated:...
r3037 # Update all the +Issues+ setting their done_ratio to the value of their +IssueStatus+
def self.update_issue_done_ratios
if Issue.use_status_for_done_ratio?
IssueStatus.find(:all, :conditions => ["default_done_ratio >= 0"]).each do |status|
Issue.update_all(["done_ratio = ?", status.default_done_ratio],
["status_id = ?", status.id])
end
end
return Issue.use_status_for_done_ratio?
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
# Returns an array of all statuses the given role can switch to
Jean-Philippe Lang
Various code cleaning, mainly on User, Permission and IssueStatus models....
r411 # Uses association cache when called more than one time
Jean-Philippe Lang
Allow additional workflow transitions for issue author and assignee (#2732)....
r4775 def new_statuses_allowed_to(roles, tracker, author=false, assignee=false)
Jean-Philippe Lang
Allows multiple roles on the same project (#706). Prerequisite for user groups feature....
r2627 if roles && tracker
role_ids = roles.collect(&:id)
Jean-Philippe Lang
Allow additional workflow transitions for issue author and assignee (#2732)....
r4775 transitions = workflows.select do |w|
role_ids.include?(w.role_id) &&
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384 w.tracker_id == tracker.id &&
Jean-Philippe Lang
Fixed: additional workflow transitions not available when set to both author and assignee (#8836)....
r6180 ((!w.author && !w.assignee) || (author && w.author) || (assignee && w.assignee))
Jean-Philippe Lang
Allow additional workflow transitions for issue author and assignee (#2732)....
r4775 end
transitions.collect{|w| w.new_status}.compact.sort
Jean-Philippe Lang
Allows multiple roles on the same project (#706). Prerequisite for user groups feature....
r2627 else
[]
end
Jean-Philippe Lang
Various code cleaning, mainly on User, Permission and IssueStatus models....
r411 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384
Jean-Philippe Lang
Various code cleaning, mainly on User, Permission and IssueStatus models....
r411 # Same thing as above but uses a database query
# More efficient than the previous method if called just once
Jean-Philippe Lang
Allow additional workflow transitions for issue author and assignee (#2732)....
r4775 def find_new_statuses_allowed_to(roles, tracker, author=false, assignee=false)
Jean-Philippe Lang
Fixed: additional workflow transitions not available when set to both author and assignee (#8836)....
r6180 if roles.present? && tracker
conditions = "(author = :false AND assignee = :false)"
conditions << " OR author = :true" if author
conditions << " OR assignee = :true" if assignee
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384
Jean-Philippe Lang
Allows multiple roles on the same project (#706). Prerequisite for user groups feature....
r2627 workflows.find(:all,
Jean-Philippe Lang
Fixed: additional workflow transitions not available when set to both author and assignee (#8836)....
r6180 :include => :new_status,
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384 :conditions => ["role_id IN (:role_ids) AND tracker_id = :tracker_id AND (#{conditions})",
Jean-Philippe Lang
Fixed: additional workflow transitions not available when set to both author and assignee (#8836)....
r6180 {:role_ids => roles.collect(&:id), :tracker_id => tracker.id, :true => true, :false => false}
]
).collect{|w| w.new_status}.compact.sort
Jean-Philippe Lang
Allows multiple roles on the same project (#706). Prerequisite for user groups feature....
r2627 else
[]
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Added the ability to customize columns of a saved query....
r771
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 def <=>(status)
position <=> status.position
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384
Jean-Philippe Lang
Added the ability to customize columns of a saved query....
r771 def to_s; name end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 private
def check_integrity
raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id])
Jean-Philippe Lang
Initial commit...
r2 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/issue_status.rb....
r6384
Jean-Philippe Lang
Fixed: Deleting statuses doesn't delete all workflow entries (#5811)....
r3767 # Deletes associated workflows
def delete_workflows
Workflow.delete_all(["old_status_id = :id OR new_status_id = :id", {:id => id}])
end
Jean-Philippe Lang
Initial commit...
r2 end