KegOnlyReason: add reason helpers, rename valid.

This commit is contained in:
Mike McQuaid 2020-04-11 14:15:42 +01:00
parent c8867e5352
commit 373650d00d
No known key found for this signature in database
GPG Key ID: 48A898132FD8EE70
4 changed files with 30 additions and 12 deletions

View File

@ -396,8 +396,8 @@ module Homebrew
end end
if @new_formula && if @new_formula &&
dep_f.keg_only_reason&.reason == :provided_by_macos && dep_f.keg_only_reason.provided_by_macos? &&
dep_f.keg_only_reason.valid? && dep_f.keg_only_reason.applicable? &&
!%w[apr apr-util openblas openssl openssl@1.1].include?(dep.name) !%w[apr apr-util openblas openssl openssl@1.1].include?(dep.name)
new_formula_problem( new_formula_problem(
"Dependency '#{dep.name}' is provided by macOS; " \ "Dependency '#{dep.name}' is provided by macOS; " \
@ -507,13 +507,14 @@ module Homebrew
return unless @core_tap return unless @core_tap
if formula.keg_only? if formula.keg_only?
return if formula.keg_only_reason.reason == :versioned_formula return if formula.keg_only_reason.versioned_formula?
if formula.name.start_with?("openssl", "libressl") && if formula.name.start_with?("openssl", "libressl") &&
formula.keg_only_reason.reason == :provided_by_macos formula.keg_only_reason.provided_by_macos?
return return
end end
end end
# TODO: verify formulae still exist
keg_only_whitelist = %w[ keg_only_whitelist = %w[
autoconf@2.13 autoconf@2.13
bash-completion@2 bash-completion@2

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
class KegOnlyReason class KegOnlyReason
def valid? def applicable?
true true
end end
end end

View File

@ -1045,7 +1045,7 @@ class Formula
def keg_only? def keg_only?
return false unless keg_only_reason return false unless keg_only_reason
keg_only_reason.valid? keg_only_reason.applicable?
end end
# @private # @private

View File

@ -13,24 +13,41 @@ class KegOnlyReason
@explanation = explanation @explanation = explanation
end end
def valid? def versioned_formula?
![:provided_by_macos, :provided_by_osx, :shadowed_by_macos].include?(@reason) @reason == :versioned_formula
end
def provided_by_macos?
@reason == :provided_by_macos
end
def shadowed_by_macos?
@reason == :shadowed_by_macos
end
def by_macos?
provided_by_macos? || shadowed_by_macos?
end
def applicable?
# macOS reasons aren't applicable on other OSs
# (see extend/os/mac/formula_support for override on macOS)
!by_macos?
end end
def to_s def to_s
return @explanation unless @explanation.empty? return @explanation unless @explanation.empty?
case @reason if versioned_formula?
when :versioned_formula
<<~EOS <<~EOS
this is an alternate version of another formula this is an alternate version of another formula
EOS EOS
when :provided_by_macos elsif provided_by_macos?
<<~EOS <<~EOS
macOS already provides this software and installing another version in macOS already provides this software and installing another version in
parallel can cause all kinds of trouble parallel can cause all kinds of trouble
EOS EOS
when :shadowed_by_macos elsif shadowed_by_macos?
<<~EOS <<~EOS
macOS provides similar software and installing this software in macOS provides similar software and installing this software in
parallel can cause all kinds of trouble parallel can cause all kinds of trouble