Fixed Iconv#close to ignore multiple calls.
[rbx.git] / rakelib / stats.rake
blobc8adb68786f49cf38a6418d9f71648e62448ec85
1 # -*- ruby -*-
3 require 'find'
5 namespace :stats do
6   $first_date = ENV['DATE'] || "2007-11-01"
7   $stats_dir = "stats"
9   require 'rakelib/git_task'
11   desc "Collect statistics for the project"
12   task :collect => [$git_dir]
14   directory $stats_dir
16   task $git_dir => $stats_dir do
17     unless test ?d, $git_dir then
18       parent = Dir.pwd
19       Dir.chdir $stats_dir do
20         sh "git clone -q #{parent} proj"
21       end
22     end
23   end
25   git_task "size" do |f, date|
26     stats = Hash.new 0
27     Find.find '.' do |file|
28       next unless test ?f, file
29       stats[File.extname(file)] += 1
30     end
31     f.puts stats.inspect
32   end
34   git_task "flog" do |f, date|
35     f.puts `flog -c kernel 2>&1`
36   end
38   git_task "spec" do |f, date|
39     # all these extra convolutions are to try to protect us from
40     # stupid specs that kill the parent process.
41     trap 'HUP', 'IGNORE'
43     # HACK: this will allow us to get clean runs w/o much hassle... replace later
44     rm_rf "spec/ruby/1.8/core/process"
46     IO.popen "(time ./bin/ci -f s) 2>&1" do |p|
47       Process.setpgid(0, 0)
48       p.each_line do |l|
49         f.puts l
50       end
51     end
52   end
54   git_task "zbuild" do |f, date| # keep this alphabetically last
55     trap 'HUP', 'IGNORE'
57     IO.popen "(rake clean && time rake) 2>&1" do |p|
58       Process.setpgid(0, 0)
59       p.each_line do |l|
60         f.puts l
61       end
62     end
63   end
65   # This allows the dates to interleave, causing less churn
66   Rake::Task["collect"].prerequisites.sort!
67   Rake::Task["collect"].prerequisites.reverse!
68 end