| 262 | 262 |  | 
  | 263 | 263 |   def graph_commits_per_author(repository) | 
  | 264 | 264 |     commits_by_author = repository.changesets.count(:all, :group => :committer) | 
  | 265 |  |     commits_by_author.to_a.sort! {|x, y| x.last <=> y.last} | 
  | 266 | 265 |  | 
  | 267 | 266 |     changes_by_author = repository.changes.count(:all, :group => :committer) | 
  | 268 | 267 |     h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o} | 
  | 269 |  |      | 
  | 270 |  |     fields = commits_by_author.collect {|r| r.first} | 
  | 271 |  |     commits_data = commits_by_author.collect {|r| r.last} | 
  | 272 |  |     changes_data = commits_by_author.collect {|r| h[r.first] || 0} | 
  |  | 268 |  | 
  |  | 269 |     # Aggregate data | 
  |  | 270 |     commits_data_aggregate = Hash.new(0) | 
  |  | 271 |     changes_data_aggregate = Hash.new(0) | 
  |  | 272 |  | 
  |  | 273 |     for commit in commits_by_author | 
  |  | 274 |       name = repository.find_committer_user(commit.first).to_s | 
  |  | 275 |       commits_data_aggregate[name] += commit.last | 
  |  | 276 |       changes_data_aggregate[name] += h[commit.first] || 0 | 
  |  | 277 |     end | 
  |  | 278 |  | 
  |  | 279 |     # Sort fields | 
  |  | 280 |     commits_data_array = commits_data_aggregate.sort {|x, y| x.last <=> y.last} | 
  |  | 281 |  | 
  |  | 282 |     fields = commits_data_array.collect {|r| r.first} | 
  |  | 283 |     commits_data = commits_data_array.collect {|r| r.last} | 
  |  | 284 |     changes_data = fields.collect {|f| changes_data_aggregate[f]} | 
  | 273 | 285 |      | 
  | 274 | 286 |     fields = fields + [""]*(10 - fields.length) if fields.length<10 | 
  | 275 | 287 |     commits_data = commits_data + [0]*(10 - commits_data.length) if commits_data.length<10 | 
  | 276 | 288 |     changes_data = changes_data + [0]*(10 - changes_data.length) if changes_data.length<10 | 
  | 277 | 289 |      | 
  | 278 |  |     # Remove email adress in usernames | 
  | 279 |  |     fields = fields.collect {|c| c.gsub(%r{<.+@.+>}, '') } | 
  | 280 |  |      | 
  | 281 | 290 |     graph = SVG::Graph::BarHorizontal.new( | 
  | 282 | 291 |       :height => 400, | 
  | 283 | 292 |       :width => 800, |