From d4a273443c0d5bb7d84d4c96a5118aefefac6599 Mon Sep 17 00:00:00 2001 From: apainintheneck Date: Wed, 6 Mar 2024 21:00:43 -0800 Subject: [PATCH] tap: add #reverse_tap_migrations_renames to speed things up This gets used by `Tap.reverse_tap_migrations_renames` and reduces the amount of information that needs to be calculated on the fly every time. --- Library/Homebrew/cask/cask.rb | 2 +- Library/Homebrew/formula.rb | 2 +- Library/Homebrew/tap.rb | 37 +++++++++++++++++++++-------------- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index 0aac5ce4d9..e3d6d51041 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -87,7 +87,7 @@ module Cask sig { returns(T::Array[String]) } def old_tokens @old_tokens ||= if (tap = self.tap) - Tap.reverse_tap_migrations_renames.fetch("#{tap}/#{token}", []) + + Tap.reverse_tap_migrations_renames(tap, token) + tap.cask_reverse_renames.fetch(token, []) else [] diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 46ffccd72f..d9394808b1 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -552,7 +552,7 @@ class Formula sig { returns(T::Array[String]) } def oldnames @oldnames ||= if (tap = self.tap) - Tap.reverse_tap_migrations_renames.fetch("#{tap}/#{name}", []) + + Tap.reverse_tap_migrations_renames(tap, name) + tap.formula_reverse_renames.fetch(name, []) else [] diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 2cf5efc378..27a93283aa 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -189,6 +189,7 @@ class Tap @command_files = nil @tap_migrations = nil + @reverse_tap_migrations_renames = nil @audit_exceptions = nil @style_exceptions = nil @@ -853,21 +854,6 @@ class Tap end end - sig { returns(T::Hash[String, T::Array[String]]) } - def self.reverse_tap_migrations_renames - Tap.each_with_object({}) do |tap, hash| - tap.tap_migrations.each do |old_name, new_name| - new_tap_user, new_tap_repo, new_name = new_name.split("/", 3) - next unless new_name - - new_tap = Tap.fetch(T.must(new_tap_user), T.must(new_tap_repo)) - - hash["#{new_tap}/#{new_name}"] ||= [] - hash["#{new_tap}/#{new_name}"] << old_name - end - end - end - # Hash with tap migrations. sig { returns(T::Hash[String, String]) } def tap_migrations @@ -878,6 +864,27 @@ class Tap end end + sig { returns(T::Hash[String, T::Array[String]]) } + def reverse_tap_migrations_renames + @reverse_tap_migrations_renames ||= tap_migrations.each_with_object({}) do |(old_name, new_name), hash| + next if new_name.count("/") != 2 + + hash[new_name] ||= [] + hash[new_name] << old_name + end + end + + sig { params(new_tap: Tap, name_or_token: String).returns(T::Array[String]) } + def self.reverse_tap_migrations_renames(new_tap, name_or_token) + key = "#{new_tap}/#{name_or_token}" + + Tap.each_with_object([]) do |tap, array| + next unless (renames = tap.reverse_tap_migrations_renames[key]) + + array.concat(renames) + end + end + # Array with autobump names sig { returns(T::Array[String]) } def autobump