Files
CocoaPods/lib/cocoapods/executable.rb
2012-05-29 14:53:14 +02:00

43 lines
1.2 KiB
Ruby

require 'open4'
module Pod
module Executable
class Indenter < ::Array
attr_accessor :indent
attr_accessor :io
def initialize(io = nil, indent = ' ')
@io = io
@indent = indent
end
def <<(value)
super
ensure
@io << "#{ indent }#{ value }" if @io
end
end
def executable(name)
bin = `which #{name}`.strip
define_method(name) do |command|
if bin.empty?
raise Informative, "Unable to locate the executable `#{name}'"
end
full_command = "#{bin} #{command}"
if Config.instance.verbose?
puts " $ #{full_command}"
stdout, stderr = Indenter.new(STDOUT), Indenter.new(STDERR)
else
stdout, stderr = Indenter.new, Indenter.new
end
status = Open4.spawn(full_command, :stdout => stdout, :stderr => stderr, :status => true)
# TODO not sure that we should be silent in case of a failure.
puts (Config.instance.verbose? ? ' ' : '') << "[!] Failed: #{full_command}".red unless status.success? || Config.instance.silent?
stdout.join("\n") + stderr.join("\n") # TODO will this suffice?
end
private name
end
end
end