From 373650d00d51c466fe5c9eaf5d09afdcb018baf7 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Sat, 11 Apr 2020 14:15:42 +0100 Subject: [PATCH] KegOnlyReason: add reason helpers, rename valid. --- Library/Homebrew/dev-cmd/audit.rb | 9 +++--- .../Homebrew/extend/os/mac/formula_support.rb | 2 +- Library/Homebrew/formula.rb | 2 +- Library/Homebrew/formula_support.rb | 29 +++++++++++++++---- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 2186484f78..190a514451 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -396,8 +396,8 @@ module Homebrew end if @new_formula && - dep_f.keg_only_reason&.reason == :provided_by_macos && - dep_f.keg_only_reason.valid? && + dep_f.keg_only_reason.provided_by_macos? && + dep_f.keg_only_reason.applicable? && !%w[apr apr-util openblas openssl openssl@1.1].include?(dep.name) new_formula_problem( "Dependency '#{dep.name}' is provided by macOS; " \ @@ -507,13 +507,14 @@ module Homebrew return unless @core_tap 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") && - formula.keg_only_reason.reason == :provided_by_macos + formula.keg_only_reason.provided_by_macos? return end end + # TODO: verify formulae still exist keg_only_whitelist = %w[ autoconf@2.13 bash-completion@2 diff --git a/Library/Homebrew/extend/os/mac/formula_support.rb b/Library/Homebrew/extend/os/mac/formula_support.rb index 95f316be88..0635fce91b 100644 --- a/Library/Homebrew/extend/os/mac/formula_support.rb +++ b/Library/Homebrew/extend/os/mac/formula_support.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class KegOnlyReason - def valid? + def applicable? true end end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 80d6c5705e..53f8377fdf 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1045,7 +1045,7 @@ class Formula def keg_only? return false unless keg_only_reason - keg_only_reason.valid? + keg_only_reason.applicable? end # @private diff --git a/Library/Homebrew/formula_support.rb b/Library/Homebrew/formula_support.rb index 008c023b25..521621711e 100644 --- a/Library/Homebrew/formula_support.rb +++ b/Library/Homebrew/formula_support.rb @@ -13,24 +13,41 @@ class KegOnlyReason @explanation = explanation end - def valid? - ![:provided_by_macos, :provided_by_osx, :shadowed_by_macos].include?(@reason) + def versioned_formula? + @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 def to_s return @explanation unless @explanation.empty? - case @reason - when :versioned_formula + if versioned_formula? <<~EOS this is an alternate version of another formula EOS - when :provided_by_macos + elsif provided_by_macos? <<~EOS macOS already provides this software and installing another version in parallel can cause all kinds of trouble EOS - when :shadowed_by_macos + elsif shadowed_by_macos? <<~EOS macOS provides similar software and installing this software in parallel can cause all kinds of trouble