class Rake::Multilogs::Fork

@private

Public Class Methods

new(task:, args:, invocation_chain:) click to toggle source
# File lib/rake/multilogs/fork.rb, line 7
def initialize(task:, args:, invocation_chain:)
  @task = task
  @args = args
  @invocation_chain = invocation_chain
end

Public Instance Methods

failed?() click to toggle source
# File lib/rake/multilogs/fork.rb, line 27
def failed?
  !@status.success?
end
invoke() click to toggle source
# File lib/rake/multilogs/fork.rb, line 13
def invoke
  @reader, @writer = IO.pipe
  @pid = fork { invoke_in_child_process }
  @writer.close
end
report() click to toggle source
# File lib/rake/multilogs/fork.rb, line 23
def report
  puts @reader.read
end
to_s() click to toggle source
# File lib/rake/multilogs/fork.rb, line 31
def to_s
  @task.to_s
end
wait() click to toggle source
# File lib/rake/multilogs/fork.rb, line 19
def wait
  _, @status = Process.wait2(@pid)
end

Private Instance Methods

invoke_in_child_process() click to toggle source
# File lib/rake/multilogs/fork.rb, line 37
def invoke_in_child_process
  @reader.close
  [STDOUT, STDERR].each do |stream|
    stream.reopen @writer
  end

  @task.application.standard_exception_handling do
    Multilogs.call_after_fork @task
    @task.send :invoke_with_call_chain, @args, @invocation_chain
  end
end