Skip to content

Commit

Permalink
IO#popen accepts a Hash like Process#spawn.
Browse files Browse the repository at this point in the history
  • Loading branch information
ileitch committed May 20, 2012
1 parent ec4c6f7 commit f162836
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
7 changes: 7 additions & 0 deletions kernel/common/io19.rb
Expand Up @@ -718,6 +718,13 @@ def self.popen(str, mode=undefined, options=undefined)
else else
cmd = str cmd = str
end end

if str.last.kind_of? Hash
redirects, options = Rubinius::Spawn.adjust_options(str.pop)
Rubinius::Spawn.setup_redirects(redirects)
Rubinius::Spawn.setup_options(options)
end

Process.perform_exec cmd.first, cmd.map(&:to_s) Process.perform_exec cmd.first, cmd.map(&:to_s)
else else
Process.perform_exec "/bin/sh", ["sh", "-c", str] Process.perform_exec "/bin/sh", ["sh", "-c", str]
Expand Down
10 changes: 8 additions & 2 deletions kernel/common/process19.rb
Expand Up @@ -205,7 +205,7 @@ def self.adjust_argv(first, *args)
[prog, argv] [prog, argv]
end end


def self.exec(env, prog, argv, redirects, options) def self.setup_redirects(redirects)
redirects.each do |key, val| redirects.each do |key, val|
key = fd_to_io(key) key = fd_to_io(key)


Expand All @@ -219,9 +219,10 @@ def self.exec(env, prog, argv, redirects, options)
key.reopen(val) key.reopen(val)
end end
end end
end


def self.setup_options(options)
ENV.clear if options[:unsetenv_others] ENV.clear if options[:unsetenv_others]
ENV.update(env)


if chdir = options[:chdir] if chdir = options[:chdir]
Dir.chdir(chdir) Dir.chdir(chdir)
Expand All @@ -235,7 +236,12 @@ def self.exec(env, prog, argv, redirects, options)
if umask = options[:umask] if umask = options[:umask]
File.umask(umask) File.umask(umask)
end end
end


def self.exec(env, prog, argv, redirects, options)
setup_redirects(redirects)
setup_options(options)
ENV.update(env)
Process.perform_exec prog, argv Process.perform_exec prog, argv
end end
end end
Expand Down

0 comments on commit f162836

Please sign in to comment.