Add popen wrapper that does not invoke the shell

This commit is contained in:
Jack Nagel 2014-07-05 13:50:54 -05:00
parent 84372e570e
commit ad27b21cd1
3 changed files with 27 additions and 0 deletions

View File

@ -5,4 +5,10 @@ class UtilTests < Homebrew::TestCase
# Issue #217 put columns with new results fails. # Issue #217 put columns with new results fails.
assert_silent { puts_columns [] } assert_silent { puts_columns [] }
end end
def test_popen_read
out = Utils.popen_read("/bin/sh", "-c", "echo success", &:read).chomp
assert_equal "success", out
assert_predicate $?, :success?
end
end end

View File

@ -3,6 +3,7 @@ require 'exceptions'
require 'os/mac' require 'os/mac'
require 'utils/json' require 'utils/json'
require 'utils/inreplace' require 'utils/inreplace'
require 'utils/popen'
require 'open-uri' require 'open-uri'
class Tty class Tty

View File

@ -0,0 +1,20 @@
module Utils
def self.popen_read(*args, &block)
popen(args, "rb", &block)
end
def self.popen_write(*args, &block)
popen(args, "wb", &block)
end
def self.popen(args, mode)
IO.popen("-", mode) do |pipe|
if pipe
yield pipe
else
STDERR.reopen("/dev/null", "w")
exec(*args)
end
end
end
end