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