namespace:paralleldodefrun_in_parallel(cmd,options)count=(options[:count]?options[:count].to_i:nil)executable=File.join(File.dirname(__FILE__),'..','..','bin','parallel_test')command="#{executable} --exec '#{cmd}' -n #{count}#{'--non-parallel'ifoptions[:non_parallel]}"abortunlesssystem(command)enddesc"create test databases via db:create --> parallel:create[num_cpus]"task:create,:countdo|t,args|run_in_parallel('rake db:create RAILS_ENV=test',args)enddesc"drop test databases via db:drop --> parallel:drop[num_cpus]"task:drop,:countdo|t,args|run_in_parallel('rake db:drop RAILS_ENV=test',args)enddesc"update test databases by dumping and loading --> parallel:prepare[num_cpus]"task(:prepare,[:count]=>'db:abort_if_pending_migrations')do|t,args|ifActiveRecord::Base.schema_format==:ruby# dump then load in parallelRake::Task['db:schema:dump'].invokeRake::Task['parallel:load_schema'].invoke(args[:count])else# there is no separate dump / load for schema_format :sql -> do it safe and slowargs=args.to_hash.merge(:non_parallel=>true)# normal merge returns nilrun_in_parallel('rake db:test:prepare --trace',args)endend# when dumping/resetting takes too longdesc"update test databases via db:mgrate --> parallel:migrate[num_cpus]"task:migrate,:countdo|t,args|run_in_parallel('rake db:migrate RAILS_ENV=test',args)end# just load the schema (good for integration server <-> no development db)desc"load dumped schema for test databases via db:schema:load --> parallel:load_schema[num_cpus]"task:load_schema,:countdo|t,args|run_in_parallel('rake db:test:load',args)end['test','spec','features'].eachdo|type|desc"run #{type} in parallel with parallel:#{type}[num_cpus]"tasktype,:count,:path_prefix,:optionsdo|t,args|$LOAD_PATH<<File.expand_path(File.join(File.dirname(__FILE__),'..'))require"parallel_tests"count,prefix,options=ParallelTests.parse_rake_args(args)executable=File.join(File.dirname(__FILE__),'..','..','bin','parallel_test')command="#{executable} --type #{type} -n #{count} -p '#{prefix}' -r '#{Rails.root}' -o '#{options}'"abortunlesssystem(command)# allow to chain tasks e.g. rake parallel:spec parallel:featuresendendend#backwards compatability#spec:parallel:prepare#spec:parallel#test:parallelnamespace:specdonamespace:paralleldotask:prepare,:countdo|t,args|$stderr.puts"WARNING -- Deprecated! use parallel:prepare"Rake::Task['parallel:prepare'].invoke(args[:count])endendtask:parallel,:count,:path_prefixdo|t,args|$stderr.puts"WARNING -- Deprecated! use parallel:spec"Rake::Task['parallel:spec'].invoke(args[:count],args[:path_prefix])endendnamespace:testdotask:parallel,:count,:path_prefixdo|t,args|$stderr.puts"WARNING -- Deprecated! use parallel:test"Rake::Task['parallel:test'].invoke(args[:count],args[:path_prefix])endend