lib/cocaine/command_line/runners/posix_runner.rb in cocaine-0.5.3 vs lib/cocaine/command_line/runners/posix_runner.rb in cocaine-0.5.4
- old
+ new
@@ -2,46 +2,51 @@
module Cocaine
class CommandLine
class PosixRunner
def self.available?
- begin
- require 'posix/spawn'
- true
- rescue LoadError => e
- false
- end
+ require 'posix/spawn'
+ true
+ rescue LoadError
+ false
end
def self.supported?
available? && !Cocaine::CommandLine.java?
end
def supported?
self.class.supported?
end
- def call(command, env = {})
+ def call(command, env = {}, options = {})
input, output = IO.pipe
- pid = spawn(env, command, :out => output)
- output.close
- result = ""
- while partial_result = input.read(8192)
- result << partial_result
+ options[:out] = output
+ with_modified_environment(env) do
+ pid = spawn(env, command, options)
+ output.close
+ result = ""
+ while partial_result = input.read(8192)
+ result << partial_result
+ end
+ waitpid(pid)
+ input.close
+ result
end
- waitpid(pid)
- input.close
- result
end
private
def spawn(*args)
POSIX::Spawn.spawn(*args)
end
def waitpid(pid)
Process.waitpid(pid)
+ end
+
+ def with_modified_environment(env, &block)
+ ClimateControl.modify(env, &block)
end
end
end
end