mirror of
https://github.com/meineerde/redmine.git
synced 2025-12-19 15:01:14 +00:00
Optimize committers/users map retrieval for statistic graphs (#13487).
git-svn-id: http://svn.redmine.org/redmine/trunk@13361 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
1c203312ae
commit
ad9a35c6b9
@ -414,17 +414,35 @@ class Repository < ActiveRecord::Base
|
|||||||
# Notes:
|
# Notes:
|
||||||
# - this hash honnors the users mapping defined for the repository
|
# - this hash honnors the users mapping defined for the repository
|
||||||
def stats_by_author
|
def stats_by_author
|
||||||
commits_by_author = Changeset.where("repository_id = ?", id).group(:committer).count
|
commits = Changeset.where("repository_id = ?", id)
|
||||||
commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}
|
.select("committer, user_id, count(*) as count")
|
||||||
|
.group("committer, user_id")
|
||||||
|
|
||||||
changes_by_author = Change.joins(:changeset).where("#{Changeset.table_name}.repository_id = ?", id).group(:committer).count
|
#TODO: restore ordering ; this line probably never worked
|
||||||
h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o}
|
#commits.to_a.sort! {|x, y| x.last <=> y.last}
|
||||||
|
|
||||||
commits_by_author.inject({}) do |hash, (name, commits_count)|
|
changes = Change.joins(:changeset)
|
||||||
mapped_name = (find_committer_user(name) || name).to_s
|
.where("#{Changeset.table_name}.repository_id = ?", id)
|
||||||
|
.select("committer, user_id, count(*) as count")
|
||||||
|
.group("committer, user_id")
|
||||||
|
|
||||||
|
user_ids = changesets.map(&:user_id).compact.uniq
|
||||||
|
authors_names = User.where(:id => user_ids).inject({}) do |memo, user|
|
||||||
|
memo[user.id] = user.to_s
|
||||||
|
memo
|
||||||
|
end
|
||||||
|
|
||||||
|
(commits + changes).inject({}) do |hash, element|
|
||||||
|
mapped_name = element.committer
|
||||||
|
if username = authors_names[element.user_id.to_i]
|
||||||
|
mapped_name = username
|
||||||
|
end
|
||||||
hash[mapped_name] ||= { :commits_count => 0, :changes_count => 0 }
|
hash[mapped_name] ||= { :commits_count => 0, :changes_count => 0 }
|
||||||
hash[mapped_name][:commits_count] += commits_count
|
if element.is_a?(Changeset)
|
||||||
hash[mapped_name][:changes_count] += h[name] || 0
|
hash[mapped_name][:commits_count] += element.count.to_i
|
||||||
|
else
|
||||||
|
hash[mapped_name][:changes_count] += element.count.to_i
|
||||||
|
end
|
||||||
hash
|
hash
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user