diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index 18549c48a0..1a9b2d1bde 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -85,9 +85,9 @@ module Cask # An old name for the cask. sig { returns(T::Array[String]) } def old_tokens - @old_tokens ||= if tap - tap.cask_renames - .flat_map { |old_token, new_token| (new_token == token) ? old_token : [] } + @old_tokens ||= if (tap = self.tap) + Tap.reverse_tap_migrations_renames.fetch("#{tap}/#{token}", []) + + tap.reverse_cask_renames.fetch(token, []) else [] end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 3cce9ccb3f..f5a60ca97f 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -540,7 +540,12 @@ class Formula # Old names for the formula. sig { returns(T::Array[String]) } def oldnames - @oldnames ||= tap&.formula_oldnames&.dig(name) || [] + @oldnames ||= if (tap = self.tap) + Tap.reverse_tap_migrations_renames.fetch("#{tap}/#{name}", []) + + tap.formula_reverse_renames.fetch(name, []) + else + [] + end end # All aliases for the formula. diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 962b3566ab..f3d86c3649 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -758,6 +758,15 @@ class Tap end end + # Hash with tap formula old names. Reverse of {#formula_renames}. + sig { returns(T::Hash[String, T::Array[String]]) } + def reverse_cask_renames + @reverse_cask_renames ||= cask_renames.each_with_object({}) do |(old_name, new_name), hash| + hash[new_name] ||= [] + hash[new_name] << old_name + end + end + # Hash with tap formula renames. sig { returns(T::Hash[String, String]) } def formula_renames @@ -770,15 +779,30 @@ class Tap # Hash with tap formula old names. Reverse of {#formula_renames}. sig { returns(T::Hash[String, T::Array[String]]) } - def formula_oldnames - @formula_oldnames ||= formula_renames.each_with_object({}) do |(old_name, new_name), hash| + def formula_reverse_renames + @formula_reverse_renames ||= formula_renames.each_with_object({}) do |(old_name, new_name), hash| hash[new_name] ||= [] hash[new_name] << old_name 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(new_tap_user, new_tap_repo) + + hash["#{new_tap}/#{new_name}"] ||= [] + hash["#{new_tap}/#{new_name}"] << old_name + end + end + end + # Hash with tap migrations. - sig { returns(Hash) } + sig { returns(T::Hash[String, String]) } def tap_migrations @tap_migrations ||= if (migration_file = path/HOMEBREW_TAP_MIGRATIONS_FILE).file? JSON.parse(migration_file.read)