Merge pull request #1752 from alyssais/uninstalling_dependencies

keg: fix fallback dependencies with multiple kegs
This commit is contained in:
Mike McQuaid 2016-12-31 17:33:08 +00:00 committed by GitHub
commit d85a83c9dc
2 changed files with 26 additions and 2 deletions

View File

@ -87,11 +87,23 @@ class Keg
mime-info pixmaps sounds postgresql mime-info pixmaps sounds postgresql
].freeze ].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. # For efficiency, we don't bother trying to get complete data.
def self.find_some_installed_dependents(kegs) def self.find_some_installed_dependents(kegs)
# First, check in the tabs of installed Formulae. # First, check in the tabs of installed Formulae.
kegs.each do |keg| kegs.each do |keg|
# Don't include dependencies of kegs that were in the given array.
dependents = keg.installed_dependents - kegs dependents = keg.installed_dependents - kegs
dependents.map! { |d| "#{d.name} #{d.version}" } dependents.map! { |d| "#{d.name} #{d.version}" }
return [keg], dependents if dependents.any? return [keg], dependents if dependents.any?
@ -105,7 +117,12 @@ class Keg
# #
# This happens after the initial dependency check because it's sloooow. # This happens after the initial dependency check because it's sloooow.
remaining_formulae = Formula.installed.select do |f| 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 end
keg_names = kegs.map(&:name) keg_names = kegs.map(&:name)

View File

@ -382,6 +382,13 @@ class InstalledDependantsTests < LinkTestCase
assert_equal [[@keg], ["bar"]], Keg.find_some_installed_dependents([@keg]) assert_equal [[@keg], ["bar"]], Keg.find_some_installed_dependents([@keg])
end 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 def test_empty_dependencies_in_tab
dependencies [] dependencies []
assert_empty @keg.installed_dependents assert_empty @keg.installed_dependents