Skip to content

Instantly share code, notes, and snippets.

@jemmyw
Created July 2, 2010 09:37
Show Gist options
  • Save jemmyw/461157 to your computer and use it in GitHub Desktop.
Save jemmyw/461157 to your computer and use it in GitHub Desktop.
#!/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