2025-03-18 17:38:37 +00:00
|
|
|
# typed: true # rubocop:todo Sorbet/StrictSigil
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Homebrew
|
|
|
|
module Bundle
|
|
|
|
module CaskDumper
|
2025-03-21 04:24:55 +00:00
|
|
|
def self.reset!
|
2025-03-18 17:38:37 +00:00
|
|
|
@casks = nil
|
|
|
|
@cask_names = nil
|
|
|
|
@cask_hash = nil
|
2025-07-10 08:05:36 +00:00
|
|
|
@cask_oldnames = nil
|
2025-03-18 17:38:37 +00:00
|
|
|
end
|
|
|
|
|
2025-03-21 04:24:55 +00:00
|
|
|
def self.cask_names
|
2025-03-18 17:38:37 +00:00
|
|
|
@cask_names ||= casks.map(&:to_s)
|
|
|
|
end
|
|
|
|
|
2025-03-21 04:24:55 +00:00
|
|
|
def self.outdated_cask_names
|
2025-03-18 17:38:37 +00:00
|
|
|
return [] unless Bundle.cask_installed?
|
|
|
|
|
|
|
|
casks.select { |c| c.outdated?(greedy: false) }
|
|
|
|
.map(&:to_s)
|
|
|
|
end
|
|
|
|
|
2025-03-21 04:24:55 +00:00
|
|
|
def self.cask_is_outdated_using_greedy?(cask_name)
|
2025-03-18 17:38:37 +00:00
|
|
|
return false unless Bundle.cask_installed?
|
|
|
|
|
|
|
|
cask = casks.find { |c| c.to_s == cask_name }
|
|
|
|
return false if cask.nil?
|
|
|
|
|
|
|
|
cask.outdated?(greedy: true)
|
|
|
|
end
|
|
|
|
|
2025-03-21 04:24:55 +00:00
|
|
|
def self.dump(describe: false)
|
2025-03-18 17:38:37 +00:00
|
|
|
casks.map do |cask|
|
|
|
|
description = "# #{cask.desc}\n" if describe && cask.desc.present?
|
|
|
|
config = ", args: { #{explicit_s(cask.config)} }" if cask.config.present? && cask.config.explicit.present?
|
|
|
|
"#{description}cask \"#{cask}\"#{config}"
|
|
|
|
end.join("\n")
|
|
|
|
end
|
|
|
|
|
2025-07-10 08:05:36 +00:00
|
|
|
def self.cask_oldnames
|
|
|
|
return @cask_oldnames if @cask_oldnames
|
|
|
|
|
|
|
|
@cask_oldnames = {}
|
|
|
|
casks.each do |c|
|
|
|
|
oldnames = c.old_tokens
|
|
|
|
next if oldnames.blank?
|
|
|
|
|
|
|
|
oldnames.each do |oldname|
|
|
|
|
@cask_oldnames[oldname] = c.full_name
|
|
|
|
if c.full_name.include? "/" # tap cask
|
|
|
|
tap_name = c.full_name.rpartition("/").first
|
|
|
|
@cask_oldnames["#{tap_name}/#{oldname}"] = c.full_name
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
@cask_oldnames
|
|
|
|
end
|
|
|
|
|
2025-03-21 04:24:55 +00:00
|
|
|
def self.formula_dependencies(cask_list)
|
2025-03-18 17:38:37 +00:00
|
|
|
return [] unless Bundle.cask_installed?
|
|
|
|
return [] if cask_list.blank?
|
|
|
|
|
|
|
|
casks.flat_map do |cask|
|
|
|
|
next unless cask_list.include?(cask.to_s)
|
|
|
|
|
|
|
|
cask.depends_on[:formula]
|
|
|
|
end.compact
|
|
|
|
end
|
|
|
|
|
2025-03-21 04:24:55 +00:00
|
|
|
private_class_method def self.casks
|
2025-03-18 17:38:37 +00:00
|
|
|
return [] unless Bundle.cask_installed?
|
|
|
|
|
|
|
|
require "cask/caskroom"
|
|
|
|
@casks ||= Cask::Caskroom.casks
|
|
|
|
end
|
|
|
|
|
2025-03-21 04:24:55 +00:00
|
|
|
private_class_method def self.explicit_s(cask_config)
|
2025-03-18 17:38:37 +00:00
|
|
|
cask_config.explicit.map do |key, value|
|
|
|
|
# inverse of #env - converts :languages config key back to --language flag
|
|
|
|
if key == :languages
|
|
|
|
key = "language"
|
|
|
|
value = cask_config.explicit.fetch(:languages, []).join(",")
|
|
|
|
end
|
|
|
|
"#{key}: \"#{value.to_s.sub(/^#{Dir.home}/, "~")}\""
|
|
|
|
end.join(", ")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|