aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorAlyssa Ross2016-12-30 16:16:53 +0000
committerAlyssa Ross2016-12-30 16:16:53 +0000
commite5db7927c940e260fe10d4c88754b7b01384e427 (patch)
treef32e3fbbda58cab77438391616a178124b118efc /Library
parentbdbc19c614dd9f787c92ce3e0f62180d2238f177 (diff)
downloadbrew-e5db7927c940e260fe10d4c88754b7b01384e427.tar.bz2
keg: fall back for dependencies of buggy tabs
Fixes #1554.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/keg.rb8
-rw-r--r--Library/Homebrew/test/keg_test.rb14
-rw-r--r--Library/Homebrew/test/uninstall_test.rb1
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" },