aboutsummaryrefslogtreecommitdiffstats
path: root/railties/Rakefile
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2015-11-03 17:42:52 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2015-11-03 17:43:08 -0800
commit5a0e0e72995472e315738dcea5b5a12d6e3d3489 (patch)
treebb99bf6d718c0151b6c9bb6a75c669a7d3494cda /railties/Rakefile
parent491f488f5ac4e50abfbd1a434971e41e48aa2f15 (diff)
downloadrails-5a0e0e72995472e315738dcea5b5a12d6e3d3489.tar.gz
rails-5a0e0e72995472e315738dcea5b5a12d6e3d3489.tar.bz2
rails-5a0e0e72995472e315738dcea5b5a12d6e3d3489.zip
don't start a new process for every test file
we can just reuse the parent process. We should figure out what files are commonly required among the test files and try to require them in the parent so that the require time cost is amortized across the processes.
Diffstat (limited to 'railties/Rakefile')
-rw-r--r--railties/Rakefile29
1 files changed, 21 insertions, 8 deletions
diff --git a/railties/Rakefile b/railties/Rakefile
index cf130a5f14..73d881b318 100644
--- a/railties/Rakefile
+++ b/railties/Rakefile
@@ -5,20 +5,33 @@ task :default => :test
desc "Run all unit tests"
task :test => 'test:isolated'
+dash_i = [
+ 'test',
+ 'lib',
+ "#{File.dirname(__FILE__)}/../activesupport/lib",
+ "#{File.dirname(__FILE__)}/../actionpack/lib",
+ "#{File.dirname(__FILE__)}/../activemodel/lib"
+]
+
+dash_i.reverse_each do |x|
+ $:.unshift x unless $:.include? x
+end
+$-w = true
+
+require 'bundler/setup' unless defined?(Bundler)
+require 'active_support'
+
namespace :test do
task :isolated do
dirs = (ENV["TEST_DIR"] || ENV["TEST_DIRS"] || "**").split(",")
test_files = dirs.map { |dir| "test/#{dir}/*_test.rb" }
Dir[*test_files].each do |file|
next true if file.include?("fixtures")
- dash_i = [
- 'test',
- 'lib',
- "#{File.dirname(__FILE__)}/../activesupport/lib",
- "#{File.dirname(__FILE__)}/../actionpack/lib",
- "#{File.dirname(__FILE__)}/../activemodel/lib"
- ]
- ruby "-w", "-I#{dash_i.join ':'}", file
+ puts "#{FileUtils::RUBY} -w -I#{dash_i.join ':'} #{file}"
+
+ # We could run these in parallel, but pretty much all of the
+ # railties tests already run in parallel, so ¯\_(⊙︿⊙)_/¯
+ Process.waitpid fork { ARGV.clear; load file }
end
end
end