homebrew-cask/lib/cask/cli/list.rb

68 lines
1.8 KiB
Ruby

class Cask::CLI::List < Cask::CLI::Base
def self.run(*arguments)
@options = Hash.new
@options[:one] = true if arguments.delete('-1')
@options[:long] = true if arguments.delete('-l')
if arguments.any?
retval = list_casks(*arguments)
else
retval = list_installed
end
# retval is ternary: true/false/nil
if retval.nil? and not arguments.any?
opoo "nothing to list" # special case: avoid exit code
elsif retval.nil?
raise CaskError.new("nothing to list")
elsif ! retval
raise CaskError.new("listing incomplete")
end
end
def self.list_casks(*cask_tokens)
count = 0
cask_tokens.each do |cask_token|
odebug "Listing files for Cask #{cask_token}"
cask = Cask.load(cask_token)
if cask.installed?
count += 1
list_artifacts(cask)
list_files(cask)
else
opoo "#{cask} is not installed"
end
end
count == 0 ? nil : count == cask_tokens.length
end
def self.list_artifacts(cask)
artifacts = Cask::Artifact.for_cask(cask)
artifacts.each do |artifact|
summary = artifact.new(cask).summary
ohai summary[:english_description], summary[:contents] unless summary.empty?
end
end
def self.list_files(cask)
ohai "Raw contents of Cask directory:"
Cask::PrettyListing.new(cask).print
end
def self.list_installed
installed_casks = Cask.installed
columns = installed_casks.map(&:to_s)
if @options[:one]
puts columns
elsif @options[:long]
puts Cask::SystemCommand.run!("/bin/ls", :args => ["-l", Cask.caskroom]).stdout
else
puts_columns columns
end
columns.empty? ? nil : installed_casks.length == columns.length
end
def self.help
"with no args, lists installed Casks; given installed Casks, lists staged files"
end
end