Created
July 2, 2010 09:37
-
-
Save jemmyw/461157 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'rubygems' | |
require 'mime/types' | |
require 'ruport' | |
require 'active_support' | |
MIME::Types.add(MIME::Type.new('text/x-haml'){|s|s.extensions=%w(haml)}) | |
MIME::Types.add(MIME::Type.new('text/x-sass'){|s|s.extensions=%w(sass)}) | |
MIME::Types.add(MIME::Type.new('application/x-ruby-rake'){|s|s.extensions=%w(rake)}) | |
MIME::Types.add(MIME::Type.new('application/c'){|s|s.extensions=%w(c)}) | |
@author = 'jeremy@boost.co.nz' | |
@repositories = [ | |
['~/dev/rails-project', '--since=2009-06-09'] | |
] | |
@excludes = [ | |
/^\s*$/, | |
/vendor\/gems/, | |
/vendor\/plugins/, | |
/vendor\/rails/, | |
/vendor\/radiant/, | |
/vendor\/scruffy/, | |
/vendor\/bundle/, | |
/lib\/scruffy/, | |
/db\/schema.rb/, | |
/tmp\/.*/, | |
/script\/\w+/, | |
/dispatch.rb/, | |
/config\/boot.rb/, | |
/prototype.*\.js/, | |
/jquery.*\.js/, | |
/g\..*\.js/, | |
/ui\..*\.js/, | |
/facebooker.*\.js/, | |
/(controls|dragdrop|effects|test|raphael|extinfowindow)\.js/, | |
/(lowpro|nicEdit|pngfix|sorttable).js/, | |
/javascripts\/svg\//, | |
/javascripts\/admin\//, | |
/javascripts\/fullcalendar\//, | |
/stylesheets\/admin\//, | |
/reset\.css/, | |
/vendor\/extensions/, | |
/rspec.rake/, | |
/\btest\//, | |
/fixtures\//, | |
/BeautifulSoup\.py/, | |
/dateutil\//, | |
/spyc\.php/ | |
] | |
@includes = [ | |
/vendor\/extensions\/signup/, | |
/vendor\/extensions\/metrics/ | |
] | |
@extensions = %w(as c builder css erb haml html js mxml php py rake rb rhtml rjs sass) | |
file_table = Table(%w(name mtype adds dels)) | |
@repositories.each do |repo| | |
cmd = 'cd %s && git log --pretty=tformat: --numstat --branches' % repo[0] | |
unless repo[1].blank? | |
cmd << ' ' | |
cmd << repo[1] | |
end | |
cmd << ' --author="%s"' % @author unless cmd.include?('--author') | |
cmd << ' --since=%s' % (1.year.ago.strftime('%Y-%m-%d')) unless cmd.include?('--since') | |
lines = `#{cmd}`.to_a | |
lines.reject! do |line| | |
@excludes.any?{|e| line =~ e} unless @includes.any?{|e| line =~ e} | |
end | |
lines.each do |line| | |
if line =~ /^(\d+)\s+(\d+)\s+(.*)\s*$/ | |
adds = $1.to_i | |
dels = $2.to_i | |
name = $3 | |
mtype = File.extname(name) | |
file_table << {'name' => name, 'mtype' => mtype, 'adds' => adds, 'dels' => dels} | |
end | |
end | |
end | |
if ARGV[0] == 'files' | |
ifiles = Table(%w(name adds dels)) | |
Grouping(file_table, :by => 'name').each do |name, group| | |
ifiles << {'name' => name, 'adds' => group.sigma('adds'), 'dels' => group.sigma('dels')} | |
end | |
puts ifiles.sort_rows_by('name') | |
else | |
type_table = Table(%w(mtype adds dels)) | |
Grouping(file_table, :by => 'mtype').each do |mtype, group| | |
if @extensions.include?(mtype.gsub(/^\./, '')) | |
type_table << {'mtype' => mtype, 'adds' => group.sigma('adds'), 'dels' => group.sigma('dels')} | |
end | |
end | |
type_table << {'mtype' => 'Total', 'adds' => type_table.sigma('adds'), 'dels' => type_table.sigma('dels')} | |
if ARGV[0] == 'graph' | |
else | |
puts type_table.sort_rows_by('mtype').to_csv | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment