mirror of
https://github.com/ruby/ruby.git
synced 2025-09-18 10:03:59 +02:00
merges r28428,r28429,r28430 and r28444 from trunk into ruby_1_9_2.
-- * test/ruby/envutil.rb (EnvUtil#invoke_ruby): get rid of possible deadlock. -- * test/ruby/envutil.rb (EnvUtil#invoke_ruby): change the environment of spawned process only. -- * test/ruby/envutil.rb (Test::Unit::Assertions#assert_in_out_err): return the exit status. -- * test/ruby/envutil.rb (EnvUtil#invoke_ruby): no needs to copy the original ENV, since it's done in spawn automatically. [ruby-dev:41733] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@28500 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d36fedc731
commit
a1a68a5810
2 changed files with 25 additions and 14 deletions
|
@ -69,9 +69,6 @@ module EnvUtil
|
|||
in_c, in_p = IO.pipe
|
||||
out_p, out_c = IO.pipe if capture_stdout
|
||||
err_p, err_c = IO.pipe if capture_stderr
|
||||
c = "C"
|
||||
env = {}
|
||||
LANG_ENVS.each {|lc| env[lc], ENV[lc] = ENV[lc], c}
|
||||
opt = opt.dup
|
||||
opt[:in] = in_c
|
||||
opt[:out] = out_c if capture_stdout
|
||||
|
@ -80,18 +77,21 @@ module EnvUtil
|
|||
out_p.set_encoding(enc) if out_p
|
||||
err_p.set_encoding(enc) if err_p
|
||||
end
|
||||
c = "C"
|
||||
child_env = {}
|
||||
LANG_ENVS.each {|lc| child_env[lc] = c}
|
||||
case args.first
|
||||
when Hash
|
||||
child_env = [args.shift]
|
||||
child_env.update(args.shift)
|
||||
end
|
||||
pid = spawn(*child_env, EnvUtil.rubybin, *args, opt)
|
||||
pid = spawn(child_env, EnvUtil.rubybin, *args, opt)
|
||||
in_c.close
|
||||
out_c.close if capture_stdout
|
||||
err_c.close if capture_stderr
|
||||
in_p.write stdin_data.to_str
|
||||
in_p.close
|
||||
th_stdout = Thread.new { out_p.read } if capture_stdout
|
||||
th_stderr = Thread.new { err_p.read } if capture_stderr
|
||||
in_p.write stdin_data.to_str
|
||||
in_p.close
|
||||
if (!capture_stdout || th_stdout.join(10)) && (!capture_stderr || th_stderr.join(10))
|
||||
stdout = th_stdout.value if capture_stdout
|
||||
stderr = th_stderr.value if capture_stderr
|
||||
|
@ -103,13 +103,6 @@ module EnvUtil
|
|||
Process.wait pid
|
||||
status = $?
|
||||
ensure
|
||||
env.each_pair {|lc, v|
|
||||
if v
|
||||
ENV[lc] = v
|
||||
else
|
||||
ENV.delete(lc)
|
||||
end
|
||||
} if env
|
||||
in_c.close if in_c && !in_c.closed?
|
||||
in_p.close if in_p && !in_p.closed?
|
||||
out_c.close if out_c && !out_c.closed?
|
||||
|
@ -205,6 +198,7 @@ module Test
|
|||
else
|
||||
assert_equal(test_stderr, stderr.lines.map {|l| l.chomp }, message)
|
||||
end
|
||||
status
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue