diff options
| author | Mike McQuaid | 2016-12-31 17:33:08 +0000 |
|---|---|---|
| committer | GitHub | 2016-12-31 17:33:08 +0000 |
| commit | d85a83c9dcf463185e905a28fb9efd3e9e880bec (patch) | |
| tree | 115e06e334b4150fff019ddb095e0a267343eeb7 /Library/Homebrew/keg.rb | |
| parent | 760a4601aa07e993c0ccb9ef01257da7361016e1 (diff) | |
| parent | b0a38c06bfce65292dafd8e43e04d9630d236218 (diff) | |
| download | brew-d85a83c9dcf463185e905a28fb9efd3e9e880bec.tar.bz2 | |
Merge pull request #1752 from alyssais/uninstalling_dependencies
keg: fix fallback dependencies with multiple kegs
Diffstat (limited to 'Library/Homebrew/keg.rb')
| -rw-r--r-- | Library/Homebrew/keg.rb | 21 |
1 files changed, 19 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) |
