Update cask logic to handle deprecations and disables
This commit is contained in:
parent
036723a668
commit
641a80475e
@ -286,6 +286,16 @@ module Cask
|
|||||||
desc json_cask[:desc]
|
desc json_cask[:desc]
|
||||||
homepage json_cask[:homepage]
|
homepage json_cask[:homepage]
|
||||||
|
|
||||||
|
if (deprecation_date = json_cask[:deprecation_date].presence)
|
||||||
|
reason = DeprecateDisable.to_reason_string_or_symbol json_cask[:deprecation_reason], type: :cask
|
||||||
|
deprecate! date: deprecation_date, because: reason
|
||||||
|
end
|
||||||
|
|
||||||
|
if (disable_date = json_cask[:disable_date].presence)
|
||||||
|
reason = DeprecateDisable.to_reason_string_or_symbol json_cask[:disable_reason], type: :cask
|
||||||
|
deprecate! date: disable_date, because: reason
|
||||||
|
end
|
||||||
|
|
||||||
auto_updates json_cask[:auto_updates] unless json_cask[:auto_updates].nil?
|
auto_updates json_cask[:auto_updates] unless json_cask[:auto_updates].nil?
|
||||||
conflicts_with(**json_cask[:conflicts_with]) if json_cask[:conflicts_with].present?
|
conflicts_with(**json_cask[:conflicts_with]) if json_cask[:conflicts_with].present?
|
||||||
|
|
||||||
|
@ -54,6 +54,23 @@ module Cask
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Error when a cask cannot be installed.
|
||||||
|
#
|
||||||
|
# @api private
|
||||||
|
class CaskCannotBeInstalledError < AbstractCaskErrorWithToken
|
||||||
|
attr_reader :message
|
||||||
|
|
||||||
|
def initialize(token, message)
|
||||||
|
super(token)
|
||||||
|
@message = message
|
||||||
|
end
|
||||||
|
|
||||||
|
sig { returns(String) }
|
||||||
|
def to_s
|
||||||
|
"Cask '#{token}' has been #{message}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Error when a cask conflicts with another cask.
|
# Error when a cask conflicts with another cask.
|
||||||
#
|
#
|
||||||
# @api private
|
# @api private
|
||||||
|
@ -12,6 +12,8 @@ module Cask
|
|||||||
|
|
||||||
output = +"#{title_info(cask)}\n"
|
output = +"#{title_info(cask)}\n"
|
||||||
output << "#{Formatter.url(cask.homepage)}\n" if cask.homepage
|
output << "#{Formatter.url(cask.homepage)}\n" if cask.homepage
|
||||||
|
deprecate_disable = DeprecateDisable.message(cask)
|
||||||
|
output << "#{deprecate_disable.capitalize}\n" if deprecate_disable
|
||||||
output << installation_info(cask)
|
output << installation_info(cask)
|
||||||
repo = repo_info(cask)
|
repo = repo_info(cask)
|
||||||
output << "#{repo}\n" if repo
|
output << "#{repo}\n" if repo
|
||||||
|
@ -93,6 +93,7 @@ module Cask
|
|||||||
old_config = @cask.config
|
old_config = @cask.config
|
||||||
predecessor = @cask if reinstall? && @cask.installed?
|
predecessor = @cask if reinstall? && @cask.installed?
|
||||||
|
|
||||||
|
check_deprecate_disable
|
||||||
check_conflicts
|
check_conflicts
|
||||||
|
|
||||||
print caveats
|
print caveats
|
||||||
@ -124,6 +125,17 @@ on_request: true)
|
|||||||
raise
|
raise
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_deprecate_disable
|
||||||
|
deprecate_disable_type = DeprecateDisable.type(@cask)
|
||||||
|
return if deprecate_disable_type.blank?
|
||||||
|
|
||||||
|
if deprecate_disable_type == :deprecated
|
||||||
|
opoo "#{@cask.token} has been #{DeprecateDisable.message(@cask)}"
|
||||||
|
elsif deprecate_disable_type == :disabled
|
||||||
|
raise CaskCannotBeInstalledError.new(@cask, DeprecateDisable.message(@cask))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def check_conflicts
|
def check_conflicts
|
||||||
return unless @cask.conflicts_with
|
return unless @cask.conflicts_with
|
||||||
|
|
||||||
|
@ -278,14 +278,8 @@ module Homebrew
|
|||||||
puts formula.desc if formula.desc
|
puts formula.desc if formula.desc
|
||||||
puts Formatter.url(formula.homepage) if formula.homepage
|
puts Formatter.url(formula.homepage) if formula.homepage
|
||||||
|
|
||||||
deprecate_disable_type, deprecate_disable_reason = DeprecateDisable.deprecate_disable_info formula
|
deprecate_disable_info_string = DeprecateDisable.message(formula)
|
||||||
if deprecate_disable_type.present?
|
puts deprecate_disable_info_string.capitalize if deprecate_disable_info_string.present?
|
||||||
if deprecate_disable_reason.present?
|
|
||||||
puts "#{deprecate_disable_type.capitalize} because it #{deprecate_disable_reason}!"
|
|
||||||
else
|
|
||||||
puts "#{deprecate_disable_type.capitalize}!"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
conflicts = formula.conflicts.map do |conflict|
|
conflicts = formula.conflicts.map do |conflict|
|
||||||
reason = " (because #{conflict.reason})" if conflict.reason
|
reason = " (because #{conflict.reason})" if conflict.reason
|
||||||
|
@ -35,23 +35,39 @@ module DeprecateDisable
|
|||||||
**SHARED_DEPRECATE_DISABLE_REASONS,
|
**SHARED_DEPRECATE_DISABLE_REASONS,
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
def deprecate_disable_info(formula_or_cask)
|
def type(formula_or_cask)
|
||||||
if formula_or_cask.deprecated?
|
return :deprecated if formula_or_cask.deprecated?
|
||||||
type = :deprecated
|
return :disabled if formula_or_cask.disabled?
|
||||||
reason = formula_or_cask.deprecation_reason
|
end
|
||||||
|
|
||||||
|
def message(formula_or_cask)
|
||||||
|
return if type(formula_or_cask).blank?
|
||||||
|
|
||||||
|
reason = if formula_or_cask.deprecated?
|
||||||
|
formula_or_cask.deprecation_reason
|
||||||
elsif formula_or_cask.disabled?
|
elsif formula_or_cask.disabled?
|
||||||
type = :disabled
|
formula_or_cask.disable_reason
|
||||||
reason = formula_or_cask.disable_reason
|
|
||||||
else
|
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
reason = if formula_or_cask.is_a?(Formula) && FORMULA_DEPRECATE_DISABLE_REASONS.key?(reason)
|
reason = if formula_or_cask.is_a?(Formula) && FORMULA_DEPRECATE_DISABLE_REASONS.key?(reason)
|
||||||
FORMULA_DEPRECATE_DISABLE_REASONS[reason]
|
FORMULA_DEPRECATE_DISABLE_REASONS[reason]
|
||||||
elsif formula_or_cask.is_a?(Cask::Cask) && CASK_DEPRECATE_DISABLE_REASONS.key?(reason)
|
elsif formula_or_cask.is_a?(Cask::Cask) && CASK_DEPRECATE_DISABLE_REASONS.key?(reason)
|
||||||
CASK_DEPRECATE_DISABLE_REASONS[reason]
|
CASK_DEPRECATE_DISABLE_REASONS[reason]
|
||||||
|
else
|
||||||
|
reason
|
||||||
end
|
end
|
||||||
|
|
||||||
[type, reason]
|
return "#{type(formula_or_cask)} because it #{reason}!" if reason.present?
|
||||||
|
|
||||||
|
"#{type(formula_or_cask)}!"
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_reason_string_or_symbol(string, type:)
|
||||||
|
if (type == :formula && FORMULA_DEPRECATE_DISABLE_REASONS.key?(string.to_sym)) ||
|
||||||
|
(type == :cask && CASK_DEPRECATE_DISABLE_REASONS.key?(string.to_sym))
|
||||||
|
return string.to_sym
|
||||||
|
end
|
||||||
|
|
||||||
|
string
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -642,6 +642,18 @@ module Homebrew
|
|||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_cask_deprecated_disabled
|
||||||
|
deprecated_or_disabled = Cask::Caskroom.casks.select(&:deprecated?)
|
||||||
|
deprecated_or_disabled += Cask::Caskroom.casks.select(&:disabled?)
|
||||||
|
return if deprecated_or_disabled.empty?
|
||||||
|
|
||||||
|
<<~EOS
|
||||||
|
Some installed casks are deprecated or disabled.
|
||||||
|
You should find replacements for the following casks:
|
||||||
|
#{deprecated_or_disabled.sort_by(&:token).uniq * "\n "}
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
sig { returns(T.nilable(String)) }
|
sig { returns(T.nilable(String)) }
|
||||||
def check_git_status
|
def check_git_status
|
||||||
return unless Utils::Git.available?
|
return unless Utils::Git.available?
|
||||||
|
@ -200,21 +200,14 @@ class FormulaInstaller
|
|||||||
|
|
||||||
sig { void }
|
sig { void }
|
||||||
def prelude
|
def prelude
|
||||||
type, reason = DeprecateDisable.deprecate_disable_info formula
|
deprecate_disable_type = DeprecateDisable.type(formula)
|
||||||
if type.present?
|
if deprecate_disable_type.present?
|
||||||
case type
|
message = "#{formula.full_name} has been #{DeprecateDisable.message(formula)}"
|
||||||
when :deprecated
|
|
||||||
if reason.present?
|
|
||||||
opoo "#{formula.full_name} has been deprecated because it #{reason}!"
|
|
||||||
else
|
|
||||||
opoo "#{formula.full_name} has been deprecated!"
|
|
||||||
end
|
|
||||||
when :disabled
|
|
||||||
if reason.present?
|
|
||||||
raise CannotInstallFormulaError, "#{formula.full_name} has been disabled because it #{reason}!"
|
|
||||||
end
|
|
||||||
|
|
||||||
raise CannotInstallFormulaError, "#{formula.full_name} has been disabled!"
|
if deprecate_disable_type == :deprecated
|
||||||
|
opoo message
|
||||||
|
elsif deprecate_disable_type == :disabled
|
||||||
|
raise CannotInstallFormulaError, message
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ require "tab"
|
|||||||
require "utils/bottles"
|
require "utils/bottles"
|
||||||
require "service"
|
require "service"
|
||||||
require "utils/curl"
|
require "utils/curl"
|
||||||
|
require "deprecate_disable"
|
||||||
|
|
||||||
require "active_support/core_ext/hash/deep_transform_values"
|
require "active_support/core_ext/hash/deep_transform_values"
|
||||||
|
|
||||||
@ -301,12 +302,12 @@ module Formulary
|
|||||||
end
|
end
|
||||||
|
|
||||||
if (deprecation_date = json_formula["deprecation_date"].presence)
|
if (deprecation_date = json_formula["deprecation_date"].presence)
|
||||||
reason = Formulary.convert_to_deprecate_disable_reason_string_or_symbol json_formula["deprecation_reason"]
|
reason = DeprecateDisable.to_reason_string_or_symbol json_formula["deprecation_reason"], type: :formula
|
||||||
deprecate! date: deprecation_date, because: reason
|
deprecate! date: deprecation_date, because: reason
|
||||||
end
|
end
|
||||||
|
|
||||||
if (disable_date = json_formula["disable_date"].presence)
|
if (disable_date = json_formula["disable_date"].presence)
|
||||||
reason = Formulary.convert_to_deprecate_disable_reason_string_or_symbol json_formula["disable_reason"]
|
reason = DeprecateDisable.to_reason_string_or_symbol json_formula["disable_reason"], type: :formula
|
||||||
disable! date: disable_date, because: reason
|
disable! date: disable_date, because: reason
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -462,13 +463,6 @@ module Formulary
|
|||||||
string
|
string
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.convert_to_deprecate_disable_reason_string_or_symbol(string)
|
|
||||||
require "deprecate_disable"
|
|
||||||
return string unless DeprecateDisable::FORMULARY_DEPRECATE_DISABLE_REASONS.keys.map(&:to_s).include?(string)
|
|
||||||
|
|
||||||
string.to_sym
|
|
||||||
end
|
|
||||||
|
|
||||||
# A {FormulaLoader} returns instances of formulae.
|
# A {FormulaLoader} returns instances of formulae.
|
||||||
# Subclasses implement loaders for particular sources of formulae.
|
# Subclasses implement loaders for particular sources of formulae.
|
||||||
class FormulaLoader
|
class FormulaLoader
|
||||||
|
Loading…
x
Reference in New Issue
Block a user