runtime_deps: improve documentation and consistency.
This commit is contained in:
parent
598bbd4c72
commit
3454d6a961
@ -1487,12 +1487,23 @@ class Formula
|
|||||||
Requirement.expand(self, &block)
|
Requirement.expand(self, &block)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns a Keg for the opt_prefix or installed_prefix if they exist.
|
||||||
|
# If not, return nil.
|
||||||
|
# @private
|
||||||
|
def opt_or_installed_prefix_keg
|
||||||
|
if optlinked? && opt_prefix.exist?
|
||||||
|
Keg.new(opt_prefix)
|
||||||
|
elsif installed_prefix.directory?
|
||||||
|
Keg.new(installed_prefix)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Returns a list of Dependency objects that are required at runtime.
|
# Returns a list of Dependency objects that are required at runtime.
|
||||||
# @private
|
# @private
|
||||||
def runtime_dependencies(read_from_tab: true)
|
def runtime_dependencies(read_from_tab: true)
|
||||||
if read_from_tab &&
|
if read_from_tab &&
|
||||||
installed_prefix.directory? &&
|
installed_prefix.directory? &&
|
||||||
(keg = Keg.new(installed_prefix)) &&
|
(keg = opt_or_installed_prefix_keg) &&
|
||||||
(tab_deps = keg.runtime_dependencies)
|
(tab_deps = keg.runtime_dependencies)
|
||||||
return tab_deps.map { |d| Dependency.new d["full_name"] }.compact
|
return tab_deps.map { |d| Dependency.new d["full_name"] }.compact
|
||||||
end
|
end
|
||||||
@ -1500,6 +1511,8 @@ class Formula
|
|||||||
declared_runtime_dependencies | undeclared_runtime_dependencies
|
declared_runtime_dependencies | undeclared_runtime_dependencies
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns a list of Dependency objects that are declared in the formula.
|
||||||
|
# @private
|
||||||
def declared_runtime_dependencies
|
def declared_runtime_dependencies
|
||||||
recursive_dependencies do |_, dependency|
|
recursive_dependencies do |_, dependency|
|
||||||
Dependency.prune if dependency.build?
|
Dependency.prune if dependency.build?
|
||||||
@ -1507,14 +1520,12 @@ class Formula
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns a list of Dependency objects that are not declared in the formula
|
||||||
|
# but the formula links to.
|
||||||
|
# @private
|
||||||
def undeclared_runtime_dependencies
|
def undeclared_runtime_dependencies
|
||||||
if optlinked?
|
keg = opt_or_installed_prefix_keg
|
||||||
keg = Keg.new(opt_prefix)
|
return [] unless keg
|
||||||
elsif prefix.directory?
|
|
||||||
keg = Keg.new(prefix)
|
|
||||||
else
|
|
||||||
return []
|
|
||||||
end
|
|
||||||
|
|
||||||
linkage_checker = LinkageChecker.new(keg, self)
|
linkage_checker = LinkageChecker.new(keg, self)
|
||||||
linkage_checker.undeclared_deps.map { |n| Dependency.new(n) }
|
linkage_checker.undeclared_deps.map { |n| Dependency.new(n) }
|
||||||
|
|||||||
@ -2,6 +2,8 @@ require "keg"
|
|||||||
require "formula"
|
require "formula"
|
||||||
|
|
||||||
class LinkageChecker
|
class LinkageChecker
|
||||||
|
attr_reader :undeclared_deps
|
||||||
|
|
||||||
def initialize(keg, formula = nil)
|
def initialize(keg, formula = nil)
|
||||||
@keg = keg
|
@keg = keg
|
||||||
@formula = formula || resolve_formula(keg)
|
@formula = formula || resolve_formula(keg)
|
||||||
@ -142,7 +144,7 @@ class LinkageChecker
|
|||||||
|
|
||||||
missing_deps = @broken_deps.values.flatten.map { |d| dylib_to_dep(d) }
|
missing_deps = @broken_deps.values.flatten.map { |d| dylib_to_dep(d) }
|
||||||
unnecessary_deps -= missing_deps
|
unnecessary_deps -= missing_deps
|
||||||
|
|
||||||
[indirect_deps, undeclared_deps, unnecessary_deps]
|
[indirect_deps, undeclared_deps, unnecessary_deps]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -708,19 +708,18 @@ describe Formula do
|
|||||||
expect(f3.runtime_dependencies.map(&:name)).to eq(["foo/bar/f1", "baz/qux/f2"])
|
expect(f3.runtime_dependencies.map(&:name)).to eq(["foo/bar/f1", "baz/qux/f2"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "includes non-declared direct dependencies" do
|
it "includes non-declared direct dependencies", :focus do
|
||||||
formula = Class.new(Testball).new
|
formula = Class.new(Testball).new
|
||||||
dependency = formula("dependency") { url "f-1.0" }
|
dependency = formula("dependency") { url "f-1.0" }
|
||||||
|
|
||||||
formula.brew { formula.install }
|
formula.brew { formula.install }
|
||||||
keg = Keg.for(formula.prefix)
|
keg = Keg.for(formula.installed_prefix)
|
||||||
keg.link
|
keg.link
|
||||||
|
|
||||||
linkage_checker = double("linkage checker", undeclared_deps: [dependency.name])
|
linkage_checker = double("linkage checker", undeclared_deps: [dependency.name])
|
||||||
allow(LinkageChecker).to receive(:new).with(keg, any_args)
|
allow(LinkageChecker).to receive(:new).and_return(linkage_checker)
|
||||||
.and_return(linkage_checker)
|
|
||||||
|
|
||||||
expect(formula.runtime_dependencies).to include an_object_having_attributes(name: dependency.name)
|
expect(formula.runtime_dependencies.map(&:name)).to eq [dependency.name]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user