From 6663516e7948f0f8402147b2c8e7b146500e6d33 Mon Sep 17 00:00:00 2001 From: Carlo Cabrera <30379873+carlocab@users.noreply.github.com> Date: Fri, 3 May 2024 14:42:16 +0100 Subject: [PATCH] tap: define `#allowed_by_env?` --- Library/Homebrew/formula_installer.rb | 29 +++-------------------- Library/Homebrew/tap.rb | 34 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index d73fc59797..f9734eb262 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -1379,30 +1379,9 @@ on_request: installed_on_request?, options:) EOS end - sig { params(tap: Tap, allowed_taps: T::Set[Tap], forbidden_taps: T::Set[Tap]).returns(T::Boolean) } - def allowed_tap?(tap, allowed_taps, forbidden_taps) - (tap.official? || allowed_taps.blank? || allowed_taps.include?(tap)) && forbidden_taps.exclude?(tap) - end - sig { void } def forbidden_tap_check - forbidden_taps = Homebrew::EnvConfig.forbidden_taps.to_s.split - allowed_taps = Homebrew::EnvConfig.allowed_taps.to_s.split - return if forbidden_taps.blank? && allowed_taps.blank? - - forbidden_taps_set = Set.new(forbidden_taps.filter_map do |tap| - Tap.fetch(tap) - rescue Tap::InvalidNameError - opoo "Invalid tap name in `HOMEBREW_FORBIDDEN_TAPS`: #{tap}" - nil - end) - - allowed_taps_set = Set.new(allowed_taps.filter_map do |tap| - Tap.fetch(tap) - rescue Tap::InvalidNameError - opoo "Invalid tap name in `HOMEBREW_ALLOWED_TAPS`: #{tap}" - nil - end) + return if Homebrew::EnvConfig.forbidden_taps.blank? && Homebrew::EnvConfig.allowed_taps.blank? owner = Homebrew::EnvConfig.forbidden_owner owner_contact = if (contact = Homebrew::EnvConfig.forbidden_owner_contact.presence) @@ -1412,8 +1391,7 @@ on_request: installed_on_request?, options:) unless ignore_deps? compute_dependencies.each do |(dep, _options)| dep_tap = dep.tap - next if dep_tap.blank? - next if allowed_tap?(dep_tap, allowed_taps_set, forbidden_taps_set) + next if dep_tap.blank? || dep_tap.allowed_by_env? raise CannotInstallFormulaError, <<~EOS The installation of #{formula.name} has a dependency #{dep.name} @@ -1426,8 +1404,7 @@ on_request: installed_on_request?, options:) return if only_deps? formula_tap = formula.tap - return if formula_tap.blank? - return if allowed_tap?(formula_tap, allowed_taps_set, forbidden_taps_set) + return if formula_tap.blank? || formula_tap.allowed_by_env? raise CannotInstallFormulaError, <<~EOS The installation of #{formula.full_name} has the tap #{formula_tap} diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index ab2046dae0..cf3da6e358 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -132,6 +132,30 @@ class Tap false end + sig { returns(T::Set[Tap]) } + def self.allowed_taps + allowed_tap_list = Homebrew::EnvConfig.allowed_taps.to_s.split + + Set.new(allowed_tap_list.filter_map do |tap| + Tap.fetch(tap) + rescue Tap::InvalidNameError + opoo "Invalid tap name in `HOMEBREW_ALLOWED_TAPS`: #{tap}" + nil + end) + end + + sig { returns(T::Set[Tap]) } + def self.forbidden_taps + forbidden_tap_list = Homebrew::EnvConfig.forbidden_taps.to_s.split + + Set.new(forbidden_tap_list.filter_map do |tap| + Tap.fetch(tap) + rescue Tap::InvalidNameError + opoo "Invalid tap name in `HOMEBREW_FORBIDDEN_TAPS`: #{tap}" + nil + end) + end + # @api public extend Enumerable @@ -1056,6 +1080,16 @@ class Tap end end + sig { returns(T::Boolean) } + def allowed_by_env? + @allowed_by_env ||= begin + allowed_taps = self.class.allowed_taps + forbidden_taps = self.class.forbidden_taps + + (official? || allowed_taps.blank? || allowed_taps.include?(self)) && forbidden_taps.exclude?(self) + end + end + private sig { params(file: Pathname).returns(T.any(T::Array[String], Hash)) }