mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
vcs.rb: popen with env
* tool/vcs.rb (IO.popen): support passing environment variables. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56649 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
30e54ac313
commit
2bb96b87a7
1 changed files with 13 additions and 0 deletions
13
tool/vcs.rb
13
tool/vcs.rb
|
@ -24,6 +24,10 @@ if RUBY_VERSION < "2.0"
|
|||
|
||||
if defined?(fork)
|
||||
def self.popen(command, *rest, &block)
|
||||
if command.kind_of?(Hash)
|
||||
env = command
|
||||
command = rest.shift
|
||||
end
|
||||
opts = rest.last
|
||||
if opts.kind_of?(Hash)
|
||||
dir = opts.delete(:chdir)
|
||||
|
@ -36,6 +40,7 @@ if RUBY_VERSION < "2.0"
|
|||
yield(f)
|
||||
else
|
||||
Dir.chdir(dir) if dir
|
||||
ENV.replace(env) if env
|
||||
exec(*command)
|
||||
end
|
||||
end
|
||||
|
@ -43,6 +48,7 @@ if RUBY_VERSION < "2.0"
|
|||
f = @orig_popen.call("-", *rest)
|
||||
unless f
|
||||
Dir.chdir(dir) if dir
|
||||
ENV.replace(env) if env
|
||||
exec(*command)
|
||||
end
|
||||
f
|
||||
|
@ -51,6 +57,11 @@ if RUBY_VERSION < "2.0"
|
|||
else
|
||||
require 'shellwords'
|
||||
def self.popen(command, *rest, &block)
|
||||
if command.kind_of?(Hash)
|
||||
env = command
|
||||
oldenv = ENV.to_hash
|
||||
command = rest.shift
|
||||
end
|
||||
opts = rest.last
|
||||
if opts.kind_of?(Hash)
|
||||
dir = opts.delete(:chdir)
|
||||
|
@ -59,7 +70,9 @@ if RUBY_VERSION < "2.0"
|
|||
|
||||
command = command.shelljoin if Array === command
|
||||
Dir.chdir(dir || ".") do
|
||||
ENV.replace(env) if env
|
||||
@orig_popen.call(command, *rest, &block)
|
||||
ENV.replace(oldenv) if oldenv
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue