diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 714dfed..a69d3dc 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -255,22 +255,31 @@ private def graph_commits_per_author(repository) commits_by_author = repository.changesets.count(:all, :group => :committer) - commits_by_author.to_a.sort! {|x, y| x.last <=> y.last} changes_by_author = repository.changes.count(:all, :group => :committer) h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o} - fields = commits_by_author.collect {|r| r.first} - commits_data = commits_by_author.collect {|r| r.last} - changes_data = commits_by_author.collect {|r| h[r.first] || 0} - + # Aggregate data + commits_data_aggregate = Hash.new(0) + changes_data_aggregate = Hash.new(0) + + for commit in commits_by_author + name = commit.first.gsub(%r{<.+@.+>}, '') + commits_data_aggregate[name] += commit.last + changes_data_aggregate[name] += h[commit.first] || 0 + end + + # Sort fields + commits_data_array = commits_data_aggregate.sort {|x, y| x.last <=> y.last} + + fields = commits_data_array.collect {|r| r.first} + commits_data = commits_data_array.collect {|r| r.last} + changes_data = fields.collect {|f| changes_data_aggregate[f]} + fields = fields + [""]*(10 - fields.length) if fields.length<10 commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10 changes_data = changes_data + [0]*(10 - changes_data.length) if changes_data.length<10 - # Remove email adress in usernames - fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') } - graph = SVG::Graph::BarHorizontal.new( :height => 400, :width => 800,