diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index 91897bb5da..96b528552e 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -55,8 +55,10 @@ module Homebrew args = tap_args.parse if args.repair? - Tap.each(&:link_completions_and_manpages) - Tap.each(&:fix_remote_configuration) + Tap.select(&:installed?).each do |tap| + tap.link_completions_and_manpages + tap.fix_remote_configuration + end elsif args.no_named? puts Tap.names else diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index 52679d8506..a951eafb38 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -146,7 +146,7 @@ module Homebrew hub = ReporterHub.new updated_taps = [] - Tap.each do |tap| + Tap.select(&:installed?).each do |tap| next if !tap.git? || tap.git_repo.origin_url.nil? next if (tap.core_tap? || tap.core_cask_tap?) && !Homebrew::EnvConfig.no_install_from_api? @@ -254,7 +254,7 @@ module Homebrew Commands.rebuild_commands_completion_list link_completions_manpages_and_docs - Tap.each(&:link_completions_and_manpages) + Tap.select(&:installed?).each(&:link_completions_and_manpages) failed_fetch_dirs = ENV["HOMEBREW_MISSING_REMOTE_REF_DIRS"]&.split("\n") if failed_fetch_dirs.present? diff --git a/Library/Homebrew/completions.rb b/Library/Homebrew/completions.rb index beafe9df8e..063e4eaafd 100644 --- a/Library/Homebrew/completions.rb +++ b/Library/Homebrew/completions.rb @@ -72,7 +72,7 @@ module Homebrew sig { void } def self.link! Settings.write :linkcompletions, true - Tap.each do |tap| + Tap.select(&:installed?).each do |tap| Utils::Link.link_completions tap.path, "brew completions link" end end @@ -80,7 +80,7 @@ module Homebrew sig { void } def self.unlink! Settings.write :linkcompletions, false - Tap.each do |tap| + Tap.select(&:installed?).each do |tap| next if tap.official? Utils::Link.unlink_completions tap.path @@ -94,7 +94,7 @@ module Homebrew sig { returns(T::Boolean) } def self.completions_to_link? - Tap.each do |tap| + Tap.select(&:installed?).each do |tap| next if tap.official? SHELLS.each do |shell| diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 35336cbe7b..2b464047cc 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -189,7 +189,7 @@ module Homebrew # Run tap audits first named_arg_taps = [*audit_formulae, *audit_casks].map(&:tap).uniq if !args.tap && !no_named_args - tap_problems = Tap.each_with_object({}) do |tap, problems| + tap_problems = Tap.select(&:installed?).each_with_object({}) do |tap, problems| next if args.tap && tap != args.tap next if named_arg_taps&.exclude?(tap) diff --git a/Library/Homebrew/diagnostic.rb b/Library/Homebrew/diagnostic.rb index ef88acca62..bcfcfdf4c0 100644 --- a/Library/Homebrew/diagnostic.rb +++ b/Library/Homebrew/diagnostic.rb @@ -545,7 +545,7 @@ module Homebrew return if ENV["CI"] return unless Utils::Git.available? - commands = Tap.map do |tap| + commands = Tap.select(&:installed?).map do |tap| next if tap.git_repo.default_origin_branch? "git -C $(brew --repo #{tap.name}) checkout #{tap.git_repo.origin_branch_name}" @@ -795,7 +795,7 @@ module Homebrew def check_for_tap_ruby_files_locations bad_tap_files = {} - Tap.each do |tap| + Tap.select(&:installed?).each do |tap| unused_formula_dirs = tap.potential_formula_dirs - [tap.formula_dir] unused_formula_dirs.each do |dir| next unless dir.exist? diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb index 978f06fde8..e6f8a357df 100644 --- a/Library/Homebrew/formulary.rb +++ b/Library/Homebrew/formulary.rb @@ -1025,7 +1025,7 @@ module Formulary def self.tap_paths(name) name = name.to_s.downcase - Tap.map do |tap| + Tap.select(&:installed?).map do |tap| formula_path = find_formula_in_tap(name, tap) alias_path = tap.alias_dir/name diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 825167e596..17ecf569e0 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -842,15 +842,25 @@ class Tap end def self.each(&block) - return unless TAP_DIRECTORY.directory? - return to_enum unless block - TAP_DIRECTORY.subdirs.each do |user| - user.subdirs.each do |repo| - yield fetch(user.basename.to_s, repo.basename.to_s) - end + installed_taps = if TAP_DIRECTORY.directory? + TAP_DIRECTORY.subdirs + .flat_map(&:subdirs) + .map(&method(:from_path)) + else + [] end + + available_taps = if Homebrew::EnvConfig.no_install_from_api? + installed_taps + else + default_taps = T.let([CoreTap.instance], T::Array[Tap]) + default_taps << CoreCaskTap.instance if OS.mac? # rubocop:disable Homebrew/MoveToExtendOS + installed_taps + default_taps + end.sort_by(&:name).uniq + + available_taps.each(&block) end # An array of all installed {Tap} names.