homebrew-cask-versions/lib/cask/system_command.rb
phinze 171456dc98 support for install/uninstall
accepts a single argument, which is a relative path to a pkg
inside the extracted Cask; homebrew-cask will attempt to install this
pkg after the Cask is extracted via `installer`

because of the many different ways uninstallers work, this
has several features:

 - `:script`: a script in the Cask which serves as an uninstaller (e.g.
   Vagrant, VirtualBox), uses `:args`, and `:input` keys to interact
   with said script
 - `:pkgutil`: a regexp which captures all package_ids installed by this
   cask; homebrew-cask will list all files installed under these ids and
   remove them
 - `:launchctl`: a list of bundle_ids for services that should be
   removed by homebrew-cask
 - `:files`: a fallback list of files to manually remove; helps when
   uninstallers miss something

refs #661
2013-07-21 22:01:38 -05:00

31 lines
737 B
Ruby

class Cask::SystemCommand
def self.run(command, options={})
command = _process_options(command, options)
output = ''
IO.popen("#{command} 2>&1", 'r+') do |pipe|
if options[:input]
options[:input].each { |line| pipe.puts line }
end
pipe.close_write
while line = pipe.gets
output << line
ohai line.chomp if options.fetch(:print, true)
end
end
output
end
def self._process_options(command, options)
if options[:sudo]
command = "sudo #{_quote(command)}"
end
if options[:args]
command = "#{command} #{options[:args].map { |arg| _quote(arg) }.join(' ')}"
end
command
end
def self._quote(string)
%Q('#{string}')
end
end