@@ -13,6 +13,7 @@ def self.run(opts = {})
1313 files = opts [ :files ]
1414 formatters = opts [ :formatters ]
1515 tags = opts [ :tags ]
16+ parallel_options = opts [ :parallel_options ]
1617
1718 # SEE: https://bit.ly/2NP87Cz
1819 start_time = opts . fetch ( :start_time ) { Process . clock_gettime ( Process ::CLOCK_MONOTONIC ) }
@@ -38,15 +39,15 @@ def self.run(opts = {})
3839 fail_fast : fail_fast ,
3940 count : count ,
4041 seed : seed ,
41- seed_used : seed_used
42+ seed_used : seed_used ,
43+ parallel_options : parallel_options
4244 ) . run
4345 end
4446
4547 def initialize ( opts )
4648 @reporter = opts [ :reporter ]
4749 @files = opts [ :files ]
4850 @tags = opts [ :tags ]
49- @runtime_log = opts [ :runtime_log ] || "tmp/turbo_rspec_runtime.log"
5051 @verbose = opts [ :verbose ]
5152 @fail_fast = opts [ :fail_fast ]
5253 @count = opts [ :count ]
@@ -56,6 +57,10 @@ def initialize(opts)
5657 @seed = opts [ :seed ]
5758 @seed_used = opts [ :seed_used ]
5859
60+ @runtime_log = opts [ :runtime_log ] || "tmp/turbo_rspec_runtime.log"
61+ @parallel_options = opts . fetch ( :parallel_options , { } )
62+ @parallel_options [ :runtime_log ] = @runtime_log
63+
5964 @messages = Thread ::Queue . new
6065 @threads = [ ]
6166 @error = false
@@ -67,27 +72,17 @@ def run
6772 ParallelTests ::RSpec ::Runner . tests_with_size ( @files , { } ) . size
6873 ] . min
6974
70- use_runtime_info = @files == [ "spec" ]
71-
72- group_opts = { }
73-
74- if use_runtime_info
75- group_opts [ :runtime_log ] = @runtime_log
76- else
77- group_opts [ :group_by ] = :filesize
78- end
79-
8075 tests_in_groups =
8176 ParallelTests ::RSpec ::Runner . tests_in_groups (
8277 @files ,
8378 @num_processes ,
84- ** group_opts
79+ @parallel_options . merge ( quiet : true )
8580 )
8681
8782 setup_tmp_dir
8883
8984 subprocess_opts = {
90- record_runtime : use_runtime_info
85+ record_runtime : use_runtime_info?
9186 }
9287
9388 report_number_of_tests ( tests_in_groups )
@@ -111,6 +106,19 @@ def run
111106
112107 private
113108
109+ def tests_files
110+ @tests_files ||= ParallelTests ::RSpec ::Runner . send ( :find_tests , @files , @parallel_options )
111+ end
112+
113+ def use_runtime_info?
114+ return true if @parallel_options [ :group_by ] == :runtime
115+
116+ runtimes = ParallelTests ::RSpec ::Runner . send ( :runtimes , tests_files , @parallel_options )
117+ runtimes . size * 1.5 > tests_files . size
118+ rescue StandardError
119+ false
120+ end
121+
114122 def setup_tmp_dir
115123 begin
116124 FileUtils . rm_r ( "tmp/test-pipes" )
0 commit comments