class RSpec::Core::Bisect::Coordinator
to the user.
- Formatters::BisectProgressFormatter: provides progress updates
- Bisect::ExampleMinimizer: Contains the core bisect logic.
to the server.
- Bisect::Runner: Runs a set of examples and directs the results
- Bisect::Server: Receives suite results.
The main entry point into the bisect logic. Coordinates among:
@private
def self.bisect_with(original_cli_args, configuration, formatter)
def self.bisect_with(original_cli_args, configuration, formatter) new(original_cli_args, configuration, formatter).bisect end
def bisect
def bisect @configuration.add_formatter @formatter reporter.close_after do repro = Server.run do |server| runner = Runner.new(server, @original_cli_args) minimizer = ExampleMinimizer.new(runner, reporter) gracefully_abort_on_sigint(minimizer) minimizer.find_minimal_repro minimizer.repro_command_for_currently_needed_ids end reporter.publish(:bisect_repro_command, :repro => repro) end true rescue BisectFailedError => e reporter.publish(:bisect_failed, :failure_explanation => e.message) false end
def gracefully_abort_on_sigint(minimizer)
def gracefully_abort_on_sigint(minimizer) trap('INT') do repro = minimizer.repro_command_for_currently_needed_ids reporter.publish(:bisect_aborted, :repro => repro) exit(1) end end
def initialize(original_cli_args, configuration, formatter)
def initialize(original_cli_args, configuration, formatter) @original_cli_args = original_cli_args @configuration = configuration @formatter = formatter end
def reporter
def reporter @configuration.reporter end