mirror of
https://github.com/donl/homebrew-cask-versions.git
synced 2026-07-17 06:16:47 -06:00
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
31 lines
737 B
Ruby
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
|