Skip to content

Commit

Permalink
keg: fallback to missing_deps if deps not in tab
Browse files Browse the repository at this point in the history
  • Loading branch information
alyssais committed Oct 25, 2016
1 parent c88b67f commit ae3f53a
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 2 deletions.
24 changes: 22 additions & 2 deletions Library/Homebrew/keg.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require "extend/pathname"
require "keg_relocate"
require "formula_lock"
require "diagnostic"
require "ostruct"

class Keg
Expand Down Expand Up @@ -297,14 +298,33 @@ def to_formula
end

def installed_dependents
Formula.installed.flat_map(&:installed_kegs).select do |keg|
Tab.for_keg(keg).runtime_dependencies.any? do |dep|
installed_kegs = Formula.installed.flat_map(&:installed_kegs)
installed_kegs_and_tabs = installed_kegs.map { |k| [k, Tab.for_keg(k)] }
kegs_by_tab_deps_presence = installed_kegs_and_tabs.group_by do |_, tab|
!tab.runtime_dependencies.nil?
end
[true, false].each { |v| kegs_by_tab_deps_presence[v] ||= [] }

kegs_by_tab_deps_presence[true].select! do |_, tab|
tab.runtime_dependencies.any? do |dep|
# Resolve formula rather than directly comparing names
# in case of conflicts between formulae from different taps.
dep_formula = Formulary.factory(dep["full_name"])
dep_formula == to_formula && dep["version"] == version.to_s
end
end

remaining_kegs_and_tabs = kegs_by_tab_deps_presence[false]
remaining_formulae = remaining_kegs_and_tabs.map { |k, _| k.to_formula }

# Expensive if installed_dependents of multiple kegs are being checked
deps = Homebrew::Diagnostic.missing_deps(remaining_formulae, [name])
remaining_kegs_and_tabs.select! do |keg, _|
keg_deps = deps[keg.to_formula.full_name]
keg_deps && keg_deps.any?
end

kegs_by_tab_deps_presence.values.flatten(1).map { |k, _| k }
end

def find(*args, &block)
Expand Down
21 changes: 21 additions & 0 deletions Library/Homebrew/test/test_keg.rb
Original file line number Diff line number Diff line change
Expand Up @@ -339,8 +339,29 @@ def dependencies(deps)
tab.write
end

def test_unknown_dependencies
dependencies nil

bar = formula "bar" do
url "bar-1.0"
depends_on "foo"
end
stub_formula_loader bar

assert_equal [@dependent], @keg.installed_dependents
end

def test_no_dependencies
dependencies []

# Make sure formula dependencies aren't checked when dependencies are
# recorded in the tab.
bar = formula "bar" do
url "bar-1.0"
depends_on "foo"
end
stub_formula_loader bar

assert_empty @keg.installed_dependents
end

Expand Down

0 comments on commit ae3f53a

Please sign in to comment.