From e3f278959756d61f966a2f6f4e54b75838d4aa21 Mon Sep 17 00:00:00 2001 From: Samuel Giddins Date: Mon, 28 Mar 2016 21:08:13 -0500 Subject: Rewrite Spec::Helpers#sys_exec In testing, this reduces time spent in sys_exec by ~12% --- spec/support/helpers.rb | 15 ++++----------- spec/support/ruby_ext.rb | 21 --------------------- 2 files changed, 4 insertions(+), 32 deletions(-) delete mode 100644 spec/support/ruby_ext.rb diff --git a/spec/support/helpers.rb b/spec/support/helpers.rb index 60c1c6f42f..0f10f5f677 100644 --- a/spec/support/helpers.rb +++ b/spec/support/helpers.rb @@ -2,9 +2,6 @@ module Spec module Helpers def reset! - @in_p = nil - @out_p = nil - @err_p = nil Dir["#{tmp}/{gems/*,*}"].each do |dir| next if %(base remote1 gems rubygems).include?(File.basename(dir)) if ENV["BUNDLER_SUDO_TESTS"] @@ -152,15 +149,11 @@ module Spec def sys_exec(cmd, expect_err = false) Open3.popen3(cmd.to_s) do |stdin, stdout, stderr, wait_thr| - @in_p = stdin - @out_p = stdout - @err_p = stderr + yield stdin if block_given? + stdin.close - yield @in_p if block_given? - @in_p.close - - @out = @out_p.read_available_bytes.strip - @err = @err_p.read_available_bytes.strip + @out = Thread.new { stdout.read }.value.strip + @err = Thread.new { stderr.read }.value.strip @exitstatus = wait_thr && wait_thr.value.exitstatus end diff --git a/spec/support/ruby_ext.rb b/spec/support/ruby_ext.rb deleted file mode 100644 index 809708b978..0000000000 --- a/spec/support/ruby_ext.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true -class IO - def read_available_bytes(chunk_size = 16_384, select_timeout = 0.02) - buffer = [] - - return "" if closed? || eof? - # IO.select cannot be used here due to the fact that it - # just does not work on windows - loop do - begin - IO.select([self], nil, nil, select_timeout) - break if eof? # stop raising :-( - buffer << readpartial(chunk_size) - rescue EOFError - break - end - end - - buffer.join - end -end -- cgit v1.2.1