Merge pull request #1737 from alyssais/tap_dependents
keg: installed dependencies of unknown formulae
This commit is contained in:
commit
577bf628e8
@ -139,6 +139,10 @@ class Keg
|
||||
raise NotAKegError, "#{path} is not inside a keg"
|
||||
end
|
||||
|
||||
def self.all
|
||||
Formula.racks.flat_map(&:subdirs).map { |d| new(d) }
|
||||
end
|
||||
|
||||
attr_reader :path, :name, :linked_keg_record, :opt_record
|
||||
protected :path
|
||||
|
||||
@ -353,14 +357,21 @@ class Keg
|
||||
end
|
||||
|
||||
def installed_dependents
|
||||
Formula.installed.flat_map(&:installed_kegs).select do |keg|
|
||||
tap = Tab.for_keg(self).source["tap"]
|
||||
Keg.all.select do |keg|
|
||||
tab = Tab.for_keg(keg)
|
||||
next if tab.runtime_dependencies.nil? # no dependency information saved.
|
||||
tab.runtime_dependencies.any? do |dep|
|
||||
# Resolve formula rather than directly comparing names
|
||||
# in case of conflicts between formulae from different taps.
|
||||
dep_formula = Formulary.factory(dep["full_name"])
|
||||
dep_formula == to_formula && dep["version"] == version.to_s
|
||||
begin
|
||||
dep_formula = Formulary.factory(dep["full_name"])
|
||||
next false unless dep_formula == to_formula
|
||||
rescue FormulaUnavailableError
|
||||
next false unless "#{tap}/#{name}" == dep["full_name"]
|
||||
end
|
||||
|
||||
dep["version"] == version.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -2,7 +2,7 @@ require "testing_env"
|
||||
require "keg"
|
||||
require "stringio"
|
||||
|
||||
class LinkTests < Homebrew::TestCase
|
||||
class LinkTestCase < Homebrew::TestCase
|
||||
include FileUtils
|
||||
|
||||
def setup_test_keg(name, version)
|
||||
@ -44,6 +44,13 @@ class LinkTests < Homebrew::TestCase
|
||||
rmtree HOMEBREW_PREFIX/"bin"
|
||||
rmtree HOMEBREW_PREFIX/"lib"
|
||||
end
|
||||
end
|
||||
|
||||
class LinkTests < LinkTestCase
|
||||
def test_all
|
||||
Formula.clear_racks_cache
|
||||
assert_equal [@keg], Keg.all
|
||||
end
|
||||
|
||||
def test_empty_installation
|
||||
%w[.DS_Store INSTALL_RECEIPT.json LICENSE.txt].each do |file|
|
||||
@ -315,7 +322,7 @@ class LinkTests < Homebrew::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
class InstalledDependantsTests < LinkTests
|
||||
class InstalledDependantsTests < LinkTestCase
|
||||
def stub_formula_name(name)
|
||||
f = formula(name) { url "foo-1.0" }
|
||||
stub_formula_loader f
|
||||
@ -353,10 +360,13 @@ class InstalledDependantsTests < LinkTests
|
||||
# from a file path or URL.
|
||||
def test_unknown_formula
|
||||
Formulary.unstub(:loader_for)
|
||||
dependencies []
|
||||
alter_tab { |t| t.source["path"] = nil }
|
||||
assert_empty @keg.installed_dependents
|
||||
assert_nil Keg.find_some_installed_dependents([@keg])
|
||||
alter_tab(@keg) do |t|
|
||||
t.source["tap"] = "some/tap"
|
||||
t.source["path"] = nil
|
||||
end
|
||||
dependencies [{ "full_name" => "some/tap/foo", "version" => "1.0" }]
|
||||
assert_equal [@dependent], @keg.installed_dependents
|
||||
assert_equal [[@keg], ["bar 1.0"]], Keg.find_some_installed_dependents([@keg])
|
||||
end
|
||||
|
||||
def test_no_dependencies_anywhere
|
||||
|
Loading…
x
Reference in New Issue
Block a user