Merge pull request #7190 from vidusheeamoli/deprecate-method-formulae

Add DSL for formulae deprecation/disabling
This commit is contained in:
Mike McQuaid 2020-04-01 14:16:15 +01:00 committed by GitHub
commit c1708ff6b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 3 deletions

View File

@ -35,7 +35,7 @@ rescue MissingEnvironmentVariables => e
exec ENV["HOMEBREW_BREW_FILE"], *ARGV
end
def head_unsupported_error
def output_unsupported_error
$stderr.puts <<~EOS
Please create pull requests instead of asking for help on Homebrew's GitHub,
Discourse, Twitter or IRC.
@ -149,7 +149,7 @@ rescue BuildError => e
Utils::Analytics.report_build_error(e)
e.dump
head_unsupported_error if Homebrew.args.HEAD?
output_unsupported_error if Homebrew.args.HEAD? || e.formula.deprecated? || e.formula.disabled?
exit 1
rescue RuntimeError, SystemCallError => e
@ -158,7 +158,7 @@ rescue RuntimeError, SystemCallError => e
onoe e
$stderr.puts e.backtrace if ARGV.debug?
head_unsupported_error if Homebrew.args.HEAD?
output_unsupported_error if Homebrew.args.HEAD?
exit 1
rescue MethodDeprecatedError => e

View File

@ -640,6 +640,20 @@ module Homebrew
EOS
end
def check_deprecated_disabled
return unless HOMEBREW_CELLAR.exist?
deprecated_or_disabled = Formula.installed.select(&:deprecated?)
deprecated_or_disabled += Formula.installed.select(&:disabled?)
return if deprecated_or_disabled.empty?
<<~EOS
Some installed formulae are deprecated or disabled.
You should find replacements for the following formulae:
#{deprecated_or_disabled.sort_by(&:full_name).uniq * "\n "}
EOS
end
def check_git_status
return unless Utils.git_available?

View File

@ -1105,6 +1105,20 @@ class Formula
end
end
# Whether this {Formula} is deprecated (i.e. warns on installation).
# Defaults to false.
# @return [Boolean]
def deprecated?
self.class.deprecated?
end
# Whether this {Formula} is disabled (i.e. cannot be installed).
# Defaults to false.
# @return [Boolean]
def disabled?
self.class.disabled?
end
def skip_cxxstdlib_check?
false
end
@ -2605,6 +2619,34 @@ class Formula
@pour_bottle_check.instance_eval(&block)
end
# Deprecates a {Formula} so a warning is shown on each installation.
def deprecate!(date: nil)
return if date.present? && Date.parse(date) > Date.today
@deprecated = true
end
# Whether this {Formula} is deprecated (i.e. warns on installation).
# Defaults to false.
# @return [Boolean]
def deprecated?
@deprecated == true
end
# Disables a {Formula} so it cannot be installed.
def disable!(date: nil)
return if date.present? && Date.parse(date) > Date.today
@disabled = true
end
# Whether this {Formula} is disabled (i.e. cannot be installed).
# Defaults to false.
# @return [Boolean]
def disabled?
@disabled == true
end
# @private
def link_overwrite(*paths)
paths.flatten!

View File

@ -161,6 +161,12 @@ class FormulaInstaller
def check_install_sanity
raise FormulaInstallationAlreadyAttemptedError, formula if self.class.attempted.include?(formula)
if formula.deprecated?
opoo "#{formula.full_name} has been deprecated!"
elsif formula.disabled?
odie "#{formula.full_name} has been disabled!"
end
return if ignore_deps?
recursive_deps = formula.recursive_dependencies