aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/keg.rb15
-rw-r--r--Library/Homebrew/test/test_keg.rb19
2 files changed, 28 insertions, 6 deletions
diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb
index e2719582d..f1275e748 100644
--- a/Library/Homebrew/keg.rb
+++ b/Library/Homebrew/keg.rb
@@ -109,13 +109,20 @@ class Keg
end
keg_names = kegs.map(&:name)
- kegs_by_name = kegs.group_by(&:to_formula)
+ kegs_by_source = kegs.group_by { |k| [k.name, Tab.for_keg(k).tap] }
+
remaining_formulae.each do |dependent|
required = dependent.missing_dependencies(hide: keg_names)
- required.select! { |f| kegs_by_name.key?(f) }
- next unless required.any?
- required_kegs = required.map { |f| kegs_by_name[f].sort_by(&:version).last }
+ required_kegs = required.map do |f|
+ f_kegs = kegs_by_source[[f.name, f.tap]]
+ next unless f_kegs
+
+ f_kegs.sort_by(&:version).last
+ end
+
+ next unless required_kegs.any?
+
return required_kegs, [dependent.to_s]
end
diff --git a/Library/Homebrew/test/test_keg.rb b/Library/Homebrew/test/test_keg.rb
index 7450d9c0f..fdc739c9d 100644
--- a/Library/Homebrew/test/test_keg.rb
+++ b/Library/Homebrew/test/test_keg.rb
@@ -317,12 +317,16 @@ end
class InstalledDependantsTests < LinkTests
def stub_formula_name(name)
- stub_formula_loader formula(name) { url "foo-1.0" }
+ f = formula(name) { url "foo-1.0" }
+ stub_formula_loader f
+ stub_formula_loader f, "homebrew/core/#{f}"
+ f
end
def setup_test_keg(name, version)
- stub_formula_name(name)
+ f = stub_formula_name(name)
keg = super
+ Tab.create(f, DevelopmentTools.default_compiler, :libcxx).write
Formula.clear_cache
keg
end
@@ -345,6 +349,17 @@ class InstalledDependantsTests < LinkTests
end
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.
+ 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])
+ end
+
def test_no_dependencies_anywhere
dependencies nil
assert_empty @keg.installed_dependents