diff options
| author | Alyssa Ross | 2016-12-30 16:16:53 +0000 |
|---|---|---|
| committer | Alyssa Ross | 2016-12-30 16:16:53 +0000 |
| commit | e5db7927c940e260fe10d4c88754b7b01384e427 (patch) | |
| tree | f32e3fbbda58cab77438391616a178124b118efc /Library | |
| parent | bdbc19c614dd9f787c92ce3e0f62180d2238f177 (diff) | |
| download | brew-e5db7927c940e260fe10d4c88754b7b01384e427.tar.bz2 | |
keg: fall back for dependencies of buggy tabs
Fixes #1554.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/keg.rb | 8 | ||||
| -rw-r--r-- | Library/Homebrew/test/keg_test.rb | 14 | ||||
| -rw-r--r-- | Library/Homebrew/test/uninstall_test.rb | 1 |
3 files changed, 19 insertions, 4 deletions
diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index 756b27288..65ae3478c 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -104,8 +104,10 @@ class Keg # so need them to be calculated now. # # This happens after the initial dependency check because it's sloooow. - remaining_formulae = Formula.installed.select do |f| - f.installed_kegs.any? { |k| Tab.for_keg(k).runtime_dependencies.nil? } + remaining_formulae = Formula.installed.reject do |f| + f.installed_kegs.all? do |k| + Tab.for_keg(k).reliable_runtime_dependencies? + end end keg_names = kegs.map(&:name) @@ -360,7 +362,7 @@ class 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. + next unless tab.reliable_runtime_dependencies? tab.runtime_dependencies.any? do |dep| # Resolve formula rather than directly comparing names # in case of conflicts between formulae from different taps. diff --git a/Library/Homebrew/test/keg_test.rb b/Library/Homebrew/test/keg_test.rb index 4fe7c6a3c..034d10215 100644 --- a/Library/Homebrew/test/keg_test.rb +++ b/Library/Homebrew/test/keg_test.rb @@ -348,13 +348,18 @@ class InstalledDependantsTests < LinkTestCase tab.write end - def dependencies(deps) + def dependencies(deps, homebrew_version: "1.1.6") alter_tab do |tab| + tab.homebrew_version = homebrew_version tab.tabfile = @dependent.join("INSTALL_RECEIPT.json") tab.runtime_dependencies = deps end end + def unreliable_dependencies(deps) + dependencies(deps, homebrew_version: "1.1.5") + end + # Test with a keg whose formula isn't known. # This can happen if e.g. a formula is installed # from a file path or URL. @@ -406,4 +411,11 @@ class InstalledDependantsTests < LinkTestCase assert_equal [@dependent], @keg.installed_dependents assert_equal [[@keg], ["bar 1.0"]], Keg.find_some_installed_dependents([@keg]) 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 diff --git a/Library/Homebrew/test/uninstall_test.rb b/Library/Homebrew/test/uninstall_test.rb index 5c53988f2..e7849178b 100644 --- a/Library/Homebrew/test/uninstall_test.rb +++ b/Library/Homebrew/test/uninstall_test.rb @@ -12,6 +12,7 @@ class UninstallTests < Homebrew::TestCase [@dependency, @dependent].each { |f| f.installed_prefix.mkpath } tab = Tab.empty + tab.homebrew_version = "1.1.6" tab.tabfile = @dependent.installed_prefix/Tab::FILENAME tab.runtime_dependencies = [ { "full_name" => "dependency", "version" => "1" }, |
