After listening to Ryan Davis’ inspiring talk, “Hurting Code for Fun & Profit” at GoRuCo today, I wrote this rake task to figure out what code to hurt. It looks though your git log, and takes the 15 .rb files in your Rails’ app/ directory and runs them through flog, so you can see which are the most complicated.
[ruby]
namespace :analyze do
namespace :commits do
desc ‘Flog the most commonly revised files in the git history’
task :most_changed_files do
counts = Hash.new(0)
IO.popen(“PAGER=cat git log –name-only –pretty=oneline 2>&1″) do |pipe|
while (!pipe.eof) do
line = pipe.readline
next unless line =~ /^(app|lib).*\.rb$/
counts[line.chomp] += 1
end
end
counts.sort_by{|item| item.last}.reverse.first(15).each do |item|
flog_score = `flog -s #{item.first}`.to_f.round
puts “#{item.first} (in #{item.last} commits) (Flog: #{flog_score})”
end
end
end
end
[/ruby]
Install it with sake from here.
UPDATE: If you’re interested in watching Ryan’s stellar talk, it will be up on Confreaks soon, or you can try the RubyConf edition of the talk.