aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorMike McQuaid2016-12-31 17:33:08 +0000
committerGitHub2016-12-31 17:33:08 +0000
commitd85a83c9dcf463185e905a28fb9efd3e9e880bec (patch)
tree115e06e334b4150fff019ddb095e0a267343eeb7 /Library/Homebrew
parent760a4601aa07e993c0ccb9ef01257da7361016e1 (diff)
parentb0a38c06bfce65292dafd8e43e04d9630d236218 (diff)
downloadbrew-d85a83c9dcf463185e905a28fb9efd3e9e880bec.tar.bz2
Merge pull request #1752 from alyssais/uninstalling_dependencies
keg: fix fallback dependencies with multiple kegs
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/keg.rb21
-rw-r--r--Library/Homebrew/test/keg_test.rb7
2 files changed, 26 insertions, 2 deletions
diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb
index 756b27288..bdb618ba2 100644
--- a/Library/Homebrew/keg.rb
+++ b/Library/Homebrew/keg.rb
@@ -87,11 +87,23 @@ class Keg
mime-info pixmaps sounds postgresql
].freeze
- # Will return some kegs, and some dependencies, if they're present.
+ # Given an array of kegs, this method will try to find some other kegs
+ # that depend on them.
+ #
+ # If it does, it returns:
+ # - some kegs in the passed array that have installed dependents
+ # - some installed dependents of those kegs.
+ #
+ # If it doesn't, it returns nil.
+ #
+ # Note that nil will be returned if the only installed dependents
+ # in the passed kegs are other kegs in the array.
+ #
# For efficiency, we don't bother trying to get complete data.
def self.find_some_installed_dependents(kegs)
# First, check in the tabs of installed Formulae.
kegs.each do |keg|
+ # Don't include dependencies of kegs that were in the given array.
dependents = keg.installed_dependents - kegs
dependents.map! { |d| "#{d.name} #{d.version}" }
return [keg], dependents if dependents.any?
@@ -105,7 +117,12 @@ class Keg
#
# 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? }
+ installed_kegs = f.installed_kegs
+
+ # Don't include dependencies of kegs that were in the given array.
+ next false if (installed_kegs - kegs).empty?
+
+ installed_kegs.any? { |k| Tab.for_keg(k).runtime_dependencies.nil? }
end
keg_names = kegs.map(&:name)
diff --git a/Library/Homebrew/test/keg_test.rb b/Library/Homebrew/test/keg_test.rb
index 4fe7c6a3c..14cdc4304 100644
--- a/Library/Homebrew/test/keg_test.rb
+++ b/Library/Homebrew/test/keg_test.rb
@@ -382,6 +382,13 @@ class InstalledDependantsTests < LinkTestCase
assert_equal [[@keg], ["bar"]], Keg.find_some_installed_dependents([@keg])
end
+ def test_uninstalling_dependent_and_dependency
+ dependencies nil
+ Formula["bar"].class.depends_on "foo"
+ assert_empty @keg.installed_dependents
+ assert_nil Keg.find_some_installed_dependents([@keg, @dependent])
+ end
+
def test_empty_dependencies_in_tab
dependencies []
assert_empty @keg.installed_dependents