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]
 | 
			
		||||
          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?
 | 
			
		||||
          conflicts_with(**json_cask[:conflicts_with]) if json_cask[:conflicts_with].present?
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -54,6 +54,23 @@ module Cask
 | 
			
		||||
    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.
 | 
			
		||||
  #
 | 
			
		||||
  # @api private
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,8 @@ module Cask
 | 
			
		||||
 | 
			
		||||
      output = +"#{title_info(cask)}\n"
 | 
			
		||||
      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)
 | 
			
		||||
      repo = repo_info(cask)
 | 
			
		||||
      output << "#{repo}\n" if repo
 | 
			
		||||
 | 
			
		||||
@ -93,6 +93,7 @@ module Cask
 | 
			
		||||
      old_config = @cask.config
 | 
			
		||||
      predecessor = @cask if reinstall? && @cask.installed?
 | 
			
		||||
 | 
			
		||||
      check_deprecate_disable
 | 
			
		||||
      check_conflicts
 | 
			
		||||
 | 
			
		||||
      print caveats
 | 
			
		||||
@ -124,6 +125,17 @@ on_request: true)
 | 
			
		||||
      raise
 | 
			
		||||
    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
 | 
			
		||||
      return unless @cask.conflicts_with
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -278,14 +278,8 @@ module Homebrew
 | 
			
		||||
    puts formula.desc if formula.desc
 | 
			
		||||
    puts Formatter.url(formula.homepage) if formula.homepage
 | 
			
		||||
 | 
			
		||||
    deprecate_disable_type, deprecate_disable_reason = DeprecateDisable.deprecate_disable_info formula
 | 
			
		||||
    if deprecate_disable_type.present?
 | 
			
		||||
      if deprecate_disable_reason.present?
 | 
			
		||||
        puts "#{deprecate_disable_type.capitalize} because it #{deprecate_disable_reason}!"
 | 
			
		||||
      else
 | 
			
		||||
        puts "#{deprecate_disable_type.capitalize}!"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    deprecate_disable_info_string = DeprecateDisable.message(formula)
 | 
			
		||||
    puts deprecate_disable_info_string.capitalize if deprecate_disable_info_string.present?
 | 
			
		||||
 | 
			
		||||
    conflicts = formula.conflicts.map do |conflict|
 | 
			
		||||
      reason = " (because #{conflict.reason})" if conflict.reason
 | 
			
		||||
 | 
			
		||||
@ -35,23 +35,39 @@ module DeprecateDisable
 | 
			
		||||
    **SHARED_DEPRECATE_DISABLE_REASONS,
 | 
			
		||||
  }.freeze
 | 
			
		||||
 | 
			
		||||
  def deprecate_disable_info(formula_or_cask)
 | 
			
		||||
    if formula_or_cask.deprecated?
 | 
			
		||||
      type = :deprecated
 | 
			
		||||
      reason = formula_or_cask.deprecation_reason
 | 
			
		||||
  def type(formula_or_cask)
 | 
			
		||||
    return :deprecated if formula_or_cask.deprecated?
 | 
			
		||||
    return :disabled if formula_or_cask.disabled?
 | 
			
		||||
  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?
 | 
			
		||||
      type = :disabled
 | 
			
		||||
      reason = formula_or_cask.disable_reason
 | 
			
		||||
    else
 | 
			
		||||
      return
 | 
			
		||||
      formula_or_cask.disable_reason
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    reason = if formula_or_cask.is_a?(Formula) && FORMULA_DEPRECATE_DISABLE_REASONS.key?(reason)
 | 
			
		||||
      FORMULA_DEPRECATE_DISABLE_REASONS[reason]
 | 
			
		||||
    elsif formula_or_cask.is_a?(Cask::Cask) && CASK_DEPRECATE_DISABLE_REASONS.key?(reason)
 | 
			
		||||
      CASK_DEPRECATE_DISABLE_REASONS[reason]
 | 
			
		||||
    else
 | 
			
		||||
      reason
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
@ -642,6 +642,18 @@ module Homebrew
 | 
			
		||||
        EOS
 | 
			
		||||
      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)) }
 | 
			
		||||
      def check_git_status
 | 
			
		||||
        return unless Utils::Git.available?
 | 
			
		||||
 | 
			
		||||
@ -200,21 +200,14 @@ class FormulaInstaller
 | 
			
		||||
 | 
			
		||||
  sig { void }
 | 
			
		||||
  def prelude
 | 
			
		||||
    type, reason = DeprecateDisable.deprecate_disable_info formula
 | 
			
		||||
    if type.present?
 | 
			
		||||
      case type
 | 
			
		||||
      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
 | 
			
		||||
    deprecate_disable_type = DeprecateDisable.type(formula)
 | 
			
		||||
    if deprecate_disable_type.present?
 | 
			
		||||
      message = "#{formula.full_name} has been #{DeprecateDisable.message(formula)}"
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@ require "tab"
 | 
			
		||||
require "utils/bottles"
 | 
			
		||||
require "service"
 | 
			
		||||
require "utils/curl"
 | 
			
		||||
require "deprecate_disable"
 | 
			
		||||
 | 
			
		||||
require "active_support/core_ext/hash/deep_transform_values"
 | 
			
		||||
 | 
			
		||||
@ -301,12 +302,12 @@ module Formulary
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      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
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      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
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -462,13 +463,6 @@ module Formulary
 | 
			
		||||
    string
 | 
			
		||||
  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.
 | 
			
		||||
  # Subclasses implement loaders for particular sources of formulae.
 | 
			
		||||
  class FormulaLoader
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user