diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb index 19316cd98ae40..13dccfb851d72 100644 --- a/Library/Homebrew/formulary.rb +++ b/Library/Homebrew/formulary.rb @@ -906,9 +906,10 @@ def self.tap_formula_name_type(tapped_name, warn:) user, repo, name = tapped_name.split("/", 3).map(&:downcase) tap = Tap.fetch user, repo type = nil + alias_name = tap.core_tap? ? name : "#{tap}/#{name}" - if (possible_alias = tap.alias_table[name].presence) - name = possible_alias + if (possible_alias = tap.alias_table[alias_name].presence) + name = possible_alias.split("/").last type = :alias elsif (new_name = tap.formula_renames[name].presence) old_name = name @@ -942,8 +943,7 @@ def self.tap_loader_for(tapped_name, warn:) if tap.core_tap? && !Homebrew::EnvConfig.no_install_from_api? if type == :alias - alias_name = tapped_name[HOMEBREW_TAP_FORMULA_REGEX, 3] - return AliasAPILoader.new(alias_name) + return AliasAPILoader.new(name) elsif Homebrew::API::Formula.all_formulae.key?(name) return FormulaAPILoader.new(name) end diff --git a/Library/Homebrew/test/formulary_spec.rb b/Library/Homebrew/test/formulary_spec.rb index 9cb4b64b80324..d7d056a406b1d 100644 --- a/Library/Homebrew/test/formulary_spec.rb +++ b/Library/Homebrew/test/formulary_spec.rb @@ -243,6 +243,13 @@ class Wrong#{described_class.class_s(formula_name)} < Formula expect(described_class.factory("bar")).to be_a(Formula) end + it "returns a Formula from a fully qualified Alias path" do + alias_dir = tap.path/"Aliases" + alias_dir.mkpath + FileUtils.ln_s formula_path, alias_dir/"bar" + expect(described_class.factory("#{tap}/bar")).to be_a(Formula) + end + it "raises an error when the Formula cannot be found" do expect do described_class.factory("#{tap}/not_existed_formula")