diff --git a/Library/Homebrew/dependency.rb b/Library/Homebrew/dependency.rb index 8464d8aea7..14b4b9d48b 100644 --- a/Library/Homebrew/dependency.rb +++ b/Library/Homebrew/dependency.rb @@ -79,6 +79,11 @@ class Dependency new(*Marshal.load(marshaled)) # rubocop:disable Security/MarshalLoad end + sig { params(formula: Formula).returns(T.self_type) } + def dup_with_formula_name(formula) + self.class.new(formula.full_name.to_s, tags, env_proc, option_names) + end + class << self # Expand the dependencies of each dependent recursively, optionally yielding # `[dependent, dep]` pairs to allow callers to apply arbitrary filters to @@ -112,7 +117,11 @@ class Dependency else next if @expand_stack.include? dep.name - expanded_deps.concat(expand(dep.to_formula, cache_key: cache_key, &block)) + dep_formula = dep.to_formula + expanded_deps.concat(expand(dep_formula, cache_key: cache_key, &block)) + + # Fixes names for renamed/aliased formulae. + dep = dep.dup_with_formula_name(dep_formula) expanded_deps << dep end end diff --git a/Library/Homebrew/test/dependency_expansion_spec.rb b/Library/Homebrew/test/dependency_expansion_spec.rb index 096202e27b..f82f9cede6 100644 --- a/Library/Homebrew/test/dependency_expansion_spec.rb +++ b/Library/Homebrew/test/dependency_expansion_spec.rb @@ -5,7 +5,8 @@ require "dependency" describe Dependency do def build_dep(name, tags = [], deps = []) dep = described_class.new(name.to_s, tags) - allow(dep).to receive(:to_formula).and_return(instance_double(Formula, deps: deps, name: name)) + allow(dep).to receive(:to_formula).and_return \ + instance_double(Formula, deps: deps, name: name, full_name: name) dep end @@ -43,7 +44,8 @@ describe Dependency do end it "preserves dependency order" do - allow(foo).to receive(:to_formula).and_return(instance_double(Formula, name: "f", deps: [qux, baz])) + allow(foo).to receive(:to_formula).and_return \ + instance_double(Formula, name: "foo", full_name: "foo", deps: [qux, baz]) expect(described_class.expand(formula)).to eq([qux, baz, foo, bar]) end end @@ -74,7 +76,8 @@ describe Dependency do it "merges dependencies and preserves env_proc" do env_proc = double dep = described_class.new("foo", [], env_proc) - allow(dep).to receive(:to_formula).and_return(instance_double(Formula, deps: [], name: "foo")) + allow(dep).to receive(:to_formula).and_return \ + instance_double(Formula, deps: [], name: "foo", full_name: "foo") deps.replace([dep]) expect(described_class.expand(formula).first.env_proc).to eq(env_proc) end @@ -124,8 +127,9 @@ describe Dependency do it "doesn't raise an error when a dependency is cyclic" do foo = build_dep(:foo) bar = build_dep(:bar, [], [foo]) - allow(foo).to receive(:to_formula).and_return(instance_double(Formula, deps: [bar], name: foo.name)) - f = instance_double(Formula, name: "f", deps: [foo, bar]) + allow(foo).to receive(:to_formula).and_return \ + instance_double(Formula, deps: [bar], name: foo.name, full_name: foo.name) + f = instance_double(Formula, name: "f", full_name: "f", deps: [foo, bar]) expect { described_class.expand(f) }.not_to raise_error end diff --git a/Library/Homebrew/test/formula_spec.rb b/Library/Homebrew/test/formula_spec.rb index 95c39ac23e..13e50332f0 100644 --- a/Library/Homebrew/test/formula_spec.rb +++ b/Library/Homebrew/test/formula_spec.rb @@ -829,7 +829,9 @@ describe Formula do allow(tap_loader).to receive(:get_formula).and_raise(RuntimeError, "tried resolving tap formula") allow(Formulary).to receive(:loader_for).with("foo/bar/f1", from: nil).and_return(tap_loader) - stub_formula_loader(formula("f2") { url("f2-1.0") }, "baz/qux/f2") + + f2_path = Tap.new("baz", "qux").path/"Formula/f2.rb" + stub_formula_loader(formula("f2", path: f2_path) { url("f2-1.0") }, "baz/qux/f2") f3 = formula "f3" do url "f3-1.0" @@ -840,7 +842,9 @@ describe Formula do expect(f3.runtime_dependencies.map(&:name)).to eq(["baz/qux/f2"]) - stub_formula_loader(formula("f1") { url("f1-1.0") }, "foo/bar/f1") + f1_path = Tap.new("foo", "bar").path/"Formula/f1.rb" + stub_formula_loader(formula("f1", path: f1_path) { url("f1-1.0") }, "foo/bar/f1") + f3.build = BuildOptions.new(Options.create(["--with-f1"]), f3.options) expect(f3.runtime_dependencies.map(&:name)).to eq(["foo/bar/f1", "baz/qux/f2"])