class Cucumber::Cli::Main

def execute!(step_mother)

def execute!(step_mother)
  trap_interrupt
  if configuration.drb?
    begin
      return DRbClient.run(@args, @error_stream, @out_stream, configuration.drb_port)
    rescue DRbClientError => e
      @error_stream.puts "WARNING: #{e.message} Running features locally:"
    end
  end
  step_mother.options = configuration.options
  step_mother.log = configuration.log
  step_mother.load_code_files(configuration.support_to_load)
  step_mother.after_configuration(configuration)
  features = step_mother.load_plain_text_features(configuration.feature_files)
  step_mother.load_code_files(configuration.step_defs_to_load)
  enable_diffing
  tag_excess = tag_excess(features)
  configuration.options[:tag_excess] = tag_excess # Hack to make it available in console.rb - later: stick on Run instance.
  runner = configuration.build_runner(step_mother, @out_stream)
  step_mother.visitor = runner # Needed to support World#announce
  
  runner.visit_features(features)
  failure = if tag_excess.any?
    true
  elsif configuration.wip?
    step_mother.scenarios(:passed).any?
  else
    step_mother.scenarios(:failed).any? ||
    (configuration.strict? && (step_mother.steps(:undefined).any? || step_mother.steps(:pending).any?))
  end
rescue ProfilesNotDefinedError, YmlLoadError, ProfileNotFound => e
  @error_stream.puts e.message
  true
end