diff options
| author | Mike McQuaid | 2016-12-29 12:58:05 +0000 |
|---|---|---|
| committer | GitHub | 2016-12-29 12:58:05 +0000 |
| commit | 05f35d763b444077806241c3496259502ed4dbd0 (patch) | |
| tree | aff717a4703603465896da1c943925c0ea83c7ec /Library | |
| parent | 27695ffeeb829ca129a87fe53f60502978ab367b (diff) | |
| parent | 961b5fff9d4426a1b53da332c8016dcd61eae48a (diff) | |
| download | brew-05f35d763b444077806241c3496259502ed4dbd0.tar.bz2 | |
Merge pull request #1681 from MikeMcQuaid/refuse-install-mixed-dependency-tree
formula_installer: prevent version mismatched deps
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/formula_installer.rb | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index bd1cc9379..c701aeb39 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -146,7 +146,23 @@ class FormulaInstaller return if ignore_deps? recursive_deps = formula.recursive_dependencies - unlinked_deps = recursive_deps.map(&:to_formula).select do |dep| + recursive_formulae = recursive_deps.map(&:to_formula) + + version_hash = {} + version_conflicts = Set.new + recursive_formulae.each do |f| + name = f.name + unversioned_name, = name.split("@") + version_hash[unversioned_name] ||= Set.new + version_hash[unversioned_name] << name + next if version_hash[unversioned_name].length < 2 + version_conflicts += version_hash[unversioned_name] + end + unless version_conflicts.empty? + raise CannotInstallFormulaError, "#{formula.full_name} contains conflicting version dependencies (#{version_conflicts.to_a.join " "}) so cannot be installed" + end + + unlinked_deps = recursive_formulae.select do |dep| dep.installed? && !dep.keg_only? && !dep.linked_keg.directory? end |
