aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/keg.rb17
-rw-r--r--Library/Homebrew/test/keg_test.rb12
2 files changed, 23 insertions, 6 deletions
diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb
index 1de4ce1f0..3d2d21d69 100644
--- a/Library/Homebrew/keg.rb
+++ b/Library/Homebrew/keg.rb
@@ -139,6 +139,10 @@ class Keg
raise NotAKegError, "#{path} is not inside a keg"
end
+ def self.all
+ Formula.racks.flat_map(&:subdirs).map { |d| new(d) }
+ end
+
attr_reader :path, :name, :linked_keg_record, :opt_record
protected :path
@@ -353,14 +357,21 @@ class Keg
end
def installed_dependents
- Formula.installed.flat_map(&:installed_kegs).select do |keg|
+ my_tab = Tab.for_keg(self)
+ Keg.all.select do |keg|
tab = Tab.for_keg(keg)
next if tab.runtime_dependencies.nil? # no dependency information saved.
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
+ begin
+ dep_formula = Formulary.factory(dep["full_name"])
+ next false unless dep_formula == to_formula
+ rescue FormulaUnavailableError
+ next false unless my_tab["full_name"] = dep["full_name"]
+ end
+
+ dep["version"] == version.to_s
end
end
end
diff --git a/Library/Homebrew/test/keg_test.rb b/Library/Homebrew/test/keg_test.rb
index b875c7205..cf5f13a6c 100644
--- a/Library/Homebrew/test/keg_test.rb
+++ b/Library/Homebrew/test/keg_test.rb
@@ -47,6 +47,11 @@ class LinkTestCase < Homebrew::TestCase
end
class LinkTests < LinkTestCase
+ def test_all
+ Formula.clear_racks_cache
+ assert_equal [@keg], Keg.all
+ end
+
def test_empty_installation
%w[.DS_Store INSTALL_RECEIPT.json LICENSE.txt].each do |file|
touch @keg/file
@@ -355,10 +360,11 @@ class InstalledDependantsTests < LinkTestCase
# from a file path or URL.
def test_unknown_formula
Formulary.unstub(:loader_for)
- dependencies []
+ alter_tab { |t| t.source["tap"] = "some/tap" }
+ dependencies [{ "full_name" => "some/tap/bar", "version" => "1.0" }]
alter_tab { |t| t.source["path"] = nil }
- assert_empty @keg.installed_dependents
- assert_nil Keg.find_some_installed_dependents([@keg])
+ assert_equal [@dependent], @keg.installed_dependents
+ assert_equal [[@keg], ["bar 1.0"]], Keg.find_some_installed_dependents([@keg])
end
def test_no_dependencies_anywhere