summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2010-02-21 14:43:45 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2010-02-21 14:43:45 +0000
commit0341ac80eb36d0ca872b2b85ef5cb75b783d14cb (patch)
tree8beb4f1f22953f2536b23bca0ac39768485c6fab /app
parent3d393a5711f6e934aa2275d06ef31bab6e902e07 (diff)
downloadredmine-0341ac80eb36d0ca872b2b85ef5cb75b783d14cb.tar.gz
redmine-0341ac80eb36d0ca872b2b85ef5cb75b783d14cb.zip
Avoid unnecessary SQL queries when loading changesets.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3473 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r--app/models/changeset.rb13
1 files changed, 7 insertions, 6 deletions
diff --git a/app/models/changeset.rb b/app/models/changeset.rb
index 89a17195b..0ed5e1661 100644
--- a/app/models/changeset.rb
+++ b/app/models/changeset.rb
@@ -84,9 +84,6 @@ class Changeset < ActiveRecord::Base
ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip)
# keywords used to fix issues
fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
- # status and optional done ratio applied
- fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
- done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i
kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
return if kw_regexp.blank?
@@ -104,7 +101,7 @@ class Changeset < ActiveRecord::Base
action = match[0]
target_issue_ids = match[1].scan(/\d+/)
target_issues = find_referenced_issues_by_id(target_issue_ids)
- if fix_status && fix_keywords.include?(action.downcase)
+ if fix_keywords.include?(action.downcase) && fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
# update status of issues
logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
target_issues.each do |issue|
@@ -118,7 +115,9 @@ class Changeset < ActiveRecord::Base
end
journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, csettext))
issue.status = fix_status
- issue.done_ratio = done_ratio if done_ratio
+ unless Setting.commit_fix_done_ratio.blank?
+ issue.done_ratio = Setting.commit_fix_done_ratio.to_i
+ end
Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update,
{ :changeset => self, :issue => issue })
issue.save
@@ -127,7 +126,8 @@ class Changeset < ActiveRecord::Base
referenced_issues += target_issues
end
- self.issues = referenced_issues.uniq
+ referenced_issues.uniq!
+ self.issues = referenced_issues unless referenced_issues.empty?
end
def short_comments
@@ -167,6 +167,7 @@ class Changeset < ActiveRecord::Base
# Finds issues that can be referenced by the commit message
# i.e. issues that belong to the repository project, a subproject or a parent project
def find_referenced_issues_by_id(ids)
+ return [] if ids.compact.empty?
Issue.find_all_by_id(ids, :include => :project).select {|issue|
project == issue.project || project.is_ancestor_of?(issue.project) || project.is_descendant_of?(issue.project)
}