|
|
@@ -414,17 +414,35 @@ class Repository < ActiveRecord::Base |
|
|
|
# Notes: |
|
|
|
# - this hash honnors the users mapping defined for the repository |
|
|
|
def stats_by_author |
|
|
|
commits_by_author = Changeset.where("repository_id = ?", id).group(:committer).count |
|
|
|
commits_by_author.to_a.sort! {|x, y| x.last <=> y.last} |
|
|
|
|
|
|
|
changes_by_author = Change.joins(:changeset).where("#{Changeset.table_name}.repository_id = ?", id).group(:committer).count |
|
|
|
h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o} |
|
|
|
commits = Changeset.where("repository_id = ?", id) |
|
|
|
.select("committer, user_id, count(*) as count") |
|
|
|
.group("committer, user_id") |
|
|
|
|
|
|
|
#TODO: restore ordering ; this line probably never worked |
|
|
|
#commits.to_a.sort! {|x, y| x.last <=> y.last} |
|
|
|
|
|
|
|
changes = Change.joins(:changeset) |
|
|
|
.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_by_author.inject({}) do |hash, (name, commits_count)| |
|
|
|
mapped_name = (find_committer_user(name) || name).to_s |
|
|
|
(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] += commits_count |
|
|
|
hash[mapped_name][:changes_count] += h[name] || 0 |
|
|
|
if element.is_a?(Changeset) |
|
|
|
hash[mapped_name][:commits_count] += element.count.to_i |
|
|
|
else |
|
|
|
hash[mapped_name][:changes_count] += element.count.to_i |
|
|
|
end |
|
|
|
hash |
|
|
|
end |
|
|
|
end |