require "rake/clean" require 'rake/testtask' require 'rubygems/package_task' CLEAN << %w(pkg doc coverage .yardoc) def scope(path) File.join(File.dirname(__FILE__), path) end desc "Benchmark Haml against ERb. TIMES=n sets the number of runs, default is 1000." task :benchmark do sh "ruby test/benchmark.rb #{ENV['TIMES']}" end Rake::TestTask.new do |t| t.libs << 'lib' t.test_files = Dir["test/**/*_test.rb"].reject {|x| x =~ /haml-spec/} t.verbose = true end gemspec = File.expand_path("../haml.gemspec", __FILE__) if File.exist? gemspec Gem::PackageTask.new(eval(File.read(gemspec))) { |pkg| } end task :submodules do if File.exist?(File.dirname(__FILE__) + "/.git") sh %{git submodule sync} sh %{git submodule update --init --recursive} end end begin require 'yard' namespace :doc do desc "List all undocumented methods and classes." task :undocumented do command = 'yard --list --query ' command << '"object.docstring.blank? && ' command << '!(object.type == :method && object.is_alias?)"' sh command end end desc "Generate documentation" task(:doc) {sh "yard"} desc "Generate documentation incrementally" task(:redoc) {sh "yard -c"} rescue LoadError end task :pages do puts "#{'=' * 50} Running rake pages" ensure_git_cleanup do sh %{git checkout haml-pages} sh %{git reset --hard origin/haml-pages} Dir.chdir("/var/www/haml-pages") do sh %{git fetch origin} sh %{git checkout stable} sh %{git reset --hard origin/stable} sh %{git checkout haml-pages} sh %{git reset --hard origin/haml-pages} sh %{rake build --trace} sh %{mkdir -p tmp} sh %{touch tmp/restart.txt} end end end # ----- Coverage ----- begin require 'rcov/rcovtask' Rcov::RcovTask.new do |t| t.test_files = FileList[scope('test/**/*_test.rb')] t.rcov_opts << '-x' << '"^\/"' if ENV['NON_NATIVE'] t.rcov_opts << "--no-rcovrt" end t.verbose = true end rescue LoadError; end # ----- Profiling ----- begin require 'ruby-prof' desc < 'test:bundles:install' do `rm -rf test/rails` `rm -rf test/plugins` with_each_gemfile {sh "bundle exec rake test"} end end # ----- Handling Updates ----- def email_on_error yield rescue Exception => e IO.popen("sendmail nex342@gmail.com", "w") do |sm| sm << "From: nex3@nex-3.com\n" << "To: nex342@gmail.com\n" << "Subject: Exception when running rake #{Rake.application.top_level_tasks.join(', ')}\n" << e.message << "\n\n" << e.backtrace.join("\n") end ensure raise e if e end def ensure_git_cleanup email_on_error {yield} ensure sh %{git reset --hard HEAD} sh %{git clean -xdf} sh %{git checkout master} end task :handle_update do email_on_error do unless ENV["REF"] =~ %r{^refs/heads/(master|stable|haml-pages)$} puts "#{'=' * 20} Ignoring rake handle_update REF=#{ENV["REF"].inspect}" next end branch = $1 puts puts puts '=' * 150 puts "Running rake handle_update REF=#{ENV["REF"].inspect}" sh %{git fetch origin} sh %{git checkout stable} sh %{git reset --hard origin/stable} sh %{git checkout master} sh %{git reset --hard origin/master} case branch when "master" sh %{rake release_edge --trace} when "stable", "haml-pages" sh %{rake pages --trace} end puts 'Done running handle_update' puts '=' * 150 end end