summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHomu <homu@barosl.com>2016-03-30 06:53:28 +0900
committerHomu <homu@barosl.com>2016-03-30 06:53:28 +0900
commit755e1a49f29ecc87dbf619310326cc1057adf697 (patch)
tree48bc7aef04d37fd852ec48b1b214ef630089b876
parent7cc7716bbfa4484a61bd277e4706249bdfb01b52 (diff)
parente3f278959756d61f966a2f6f4e54b75838d4aa21 (diff)
downloadbundler-755e1a49f29ecc87dbf619310326cc1057adf697.tar.gz
Auto merge of #4414 - bundler:seg-sys-exec, r=indirect
Rewrite Spec::Helpers#sys_exec In testing, this reduces time spent in sys_exec by ~12% \c @indirect
-rw-r--r--spec/support/helpers.rb15
-rw-r--r--spec/support/ruby_ext.rb21
2 files changed, 4 insertions, 32 deletions
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