keg: fall back for dependencies of buggy tabs

Fixes #1554.
This commit is contained in:
Alyssa Ross 2016-12-30 16:16:53 +00:00
parent bdbc19c614
commit e5db7927c9
3 changed files with 19 additions and 4 deletions

View File

@ -104,8 +104,10 @@ class Keg
# so need them to be calculated now. # so need them to be calculated now.
# #
# This happens after the initial dependency check because it's sloooow. # This happens after the initial dependency check because it's sloooow.
remaining_formulae = Formula.installed.select do |f| remaining_formulae = Formula.installed.reject do |f|
f.installed_kegs.any? { |k| Tab.for_keg(k).runtime_dependencies.nil? } f.installed_kegs.all? do |k|
Tab.for_keg(k).reliable_runtime_dependencies?
end
end end
keg_names = kegs.map(&:name) keg_names = kegs.map(&:name)
@ -360,7 +362,7 @@ class Keg
tap = Tab.for_keg(self).source["tap"] tap = Tab.for_keg(self).source["tap"]
Keg.all.select do |keg| 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 unless tab.reliable_runtime_dependencies?
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.

View File

@ -348,13 +348,18 @@ class InstalledDependantsTests < LinkTestCase
tab.write tab.write
end end
def dependencies(deps) def dependencies(deps, homebrew_version: "1.1.6")
alter_tab do |tab| alter_tab do |tab|
tab.homebrew_version = homebrew_version
tab.tabfile = @dependent.join("INSTALL_RECEIPT.json") tab.tabfile = @dependent.join("INSTALL_RECEIPT.json")
tab.runtime_dependencies = deps tab.runtime_dependencies = deps
end end
end end
def unreliable_dependencies(deps)
dependencies(deps, homebrew_version: "1.1.5")
end
# Test with a keg whose formula isn't known. # Test with a keg whose formula isn't known.
# This can happen if e.g. a formula is installed # This can happen if e.g. a formula is installed
# from a file path or URL. # from a file path or URL.
@ -406,4 +411,11 @@ class InstalledDependantsTests < LinkTestCase
assert_equal [@dependent], @keg.installed_dependents assert_equal [@dependent], @keg.installed_dependents
assert_equal [[@keg], ["bar 1.0"]], Keg.find_some_installed_dependents([@keg]) assert_equal [[@keg], ["bar 1.0"]], Keg.find_some_installed_dependents([@keg])
end end
def test_fallback_for_old_versions
unreliable_dependencies [{ "full_name" => "baz", "version" => "1.0" }]
Formula["bar"].class.depends_on "foo"
assert_empty @keg.installed_dependents
assert_equal [[@keg], ["bar"]], Keg.find_some_installed_dependents([@keg])
end
end end

View File

@ -12,6 +12,7 @@ class UninstallTests < Homebrew::TestCase
[@dependency, @dependent].each { |f| f.installed_prefix.mkpath } [@dependency, @dependent].each { |f| f.installed_prefix.mkpath }
tab = Tab.empty tab = Tab.empty
tab.homebrew_version = "1.1.6"
tab.tabfile = @dependent.installed_prefix/Tab::FILENAME tab.tabfile = @dependent.installed_prefix/Tab::FILENAME
tab.runtime_dependencies = [ tab.runtime_dependencies = [
{ "full_name" => "dependency", "version" => "1" }, { "full_name" => "dependency", "version" => "1" },