aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/keg.rb
diff options
context:
space:
mode:
authorAlyssa Ross2016-11-13 23:17:40 +0000
committerAlyssa Ross2016-11-13 23:20:38 +0000
commitf7f72093a80aade07d9b1da7f1e64dadcb5bd62b (patch)
tree2870799578e88151d9d0b40cd7946d3d78fbaf81 /Library/Homebrew/keg.rb
parent0f6cd9d7a51108497974cae52f177c9a8c57c0ed (diff)
downloadbrew-f7f72093a80aade07d9b1da7f1e64dadcb5bd62b.tar.bz2
keg: don't rely on #to_formula
It doesn't always work. For example, a keg could have been installed with a formula from a URL, which Homebrew now does not know how to access. Fixes #1496.
Diffstat (limited to 'Library/Homebrew/keg.rb')
-rw-r--r--Library/Homebrew/keg.rb15
1 files changed, 11 insertions, 4 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