diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-07 00:04:20 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-07 00:04:20 +0000 |
commit | 2bb96b87a752ba186bd285e43239119c6c2f2678 (patch) | |
tree | 045272a9b3c90a57b8efad671965e7421799238a | |
parent | 30e54ac313f8abfadff37789bcf1c5ce9d383406 (diff) |
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
-rw-r--r-- | tool/vcs.rb | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/tool/vcs.rb b/tool/vcs.rb index e663d86a98..97ff155914 100644 --- a/tool/vcs.rb +++ b/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 |