414 |
414 |
# Notes:
|
415 |
415 |
# - this hash honnors the users mapping defined for the repository
|
416 |
416 |
def stats_by_author
|
417 |
|
commits_by_author = Changeset.where("repository_id = ?", id).group(:committer).count
|
418 |
|
commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}
|
419 |
|
|
420 |
|
changes_by_author = Change.joins(:changeset).where("#{Changeset.table_name}.repository_id = ?", id).group(:committer).count
|
421 |
|
h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o}
|
|
417 |
commits = Changeset.where("repository_id = ?", id)
|
|
418 |
.select("committer, user_id, count(*) as count")
|
|
419 |
.group("committer, user_id")
|
|
420 |
|
|
421 |
#TODO: restore ordering ; this line probably never worked
|
|
422 |
#commits.to_a.sort! {|x, y| x.last <=> y.last}
|
|
423 |
|
|
424 |
changes = Change.joins(:changeset)
|
|
425 |
.where("#{Changeset.table_name}.repository_id = ?", id)
|
|
426 |
.select("committer, user_id, count(*) as count")
|
|
427 |
.group("committer, user_id")
|
|
428 |
|
|
429 |
user_ids = changesets.map(&:user_id).compact.uniq
|
|
430 |
authors_names = User.where(:id => user_ids).inject({}) do |memo, user|
|
|
431 |
memo[user.id] = user.to_s
|
|
432 |
memo
|
|
433 |
end
|
422 |
434 |
|
423 |
|
commits_by_author.inject({}) do |hash, (name, commits_count)|
|
424 |
|
mapped_name = (find_committer_user(name) || name).to_s
|
|
435 |
(commits + changes).inject({}) do |hash, element|
|
|
436 |
mapped_name = element.committer
|
|
437 |
if username = authors_names[element.user_id.to_i]
|
|
438 |
mapped_name = username
|
|
439 |
end
|
425 |
440 |
hash[mapped_name] ||= { :commits_count => 0, :changes_count => 0 }
|
426 |
|
hash[mapped_name][:commits_count] += commits_count
|
427 |
|
hash[mapped_name][:changes_count] += h[name] || 0
|
|
441 |
if element.is_a?(Changeset)
|
|
442 |
hash[mapped_name][:commits_count] += element.count.to_i
|
|
443 |
else
|
|
444 |
hash[mapped_name][:changes_count] += element.count.to_i
|
|
445 |
end
|
428 |
446 |
hash
|
429 |
447 |
end
|
430 |
448 |
end
|