From a83baba8b50e29e680b89588ca19347ac0133608 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Sun, 30 Jul 2017 16:56:24 +0100 Subject: [PATCH] formula_installer: use default_formula for bottles This was the original, intended functionality before this was broken in fe117bf79b244c42b7e4049d353c3c003eae4880. Fixes https://github.com/Homebrew/homebrew-core/issues/13680. --- Library/Homebrew/formula_installer.rb | 19 ++++++++++--------- Library/Homebrew/requirement.rb | 6 ++++-- .../Homebrew/test/formula_installer_spec.rb | 8 ++++---- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index a0c091e7fb..d1c2bd08d5 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -402,14 +402,13 @@ class FormulaInstaller raise UnsatisfiedRequirements, fatals end - def install_requirement_formula?(req, dependent, build) - req_dependency = req.to_dependency + def install_requirement_formula?(req_dependency, req, install_bottle_for_dependent) return false unless req_dependency return true unless req.satisfied? return false if req.run? return true if build_bottle? return true if req.satisfied_by_formula? - install_bottle_for?(dependent, build) + install_bottle_for_dependent end def runtime_requirements(formula) @@ -429,19 +428,21 @@ class FormulaInstaller runtime_requirements = runtime_requirements(f) f.recursive_requirements do |dependent, req| build = effective_build_options_for(dependent) + install_bottle_for_dependent = install_bottle_for?(dependent, build) + use_default_formula = install_bottle_for_dependent || build_bottle? + req_dependency = req.to_dependency(use_default_formula: use_default_formula) if (req.optional? || req.recommended?) && build.without?(req) Requirement.prune - elsif req.build? && install_bottle_for?(dependent, build) + elsif req.build? && install_bottle_for_dependent Requirement.prune - elsif install_requirement_formula?(req, dependent, build) - dep = req.to_dependency - deps.unshift(dep) - formulae.unshift(dep.to_formula) + elsif install_requirement_formula?(req_dependency, req, install_bottle_for_dependent) + deps.unshift(req_dependency) + formulae.unshift(req_dependency.to_formula) Requirement.prune elsif req.satisfied? Requirement.prune - elsif !runtime_requirements.include?(req) && install_bottle_for?(dependent, build) + elsif !runtime_requirements.include?(req) && install_bottle_for_dependent Requirement.prune else unsatisfied_reqs[dependent] << req diff --git a/Library/Homebrew/requirement.rb b/Library/Homebrew/requirement.rb index cfb925b49a..1ec8580c44 100644 --- a/Library/Homebrew/requirement.rb +++ b/Library/Homebrew/requirement.rb @@ -129,8 +129,10 @@ class Requirement !@formula.nil? end - def to_dependency - if formula =~ HOMEBREW_TAP_FORMULA_REGEX + def to_dependency(use_default_formula: false) + if use_default_formula && default_formula? + Dependency.new(self.class.default_formula, tags, method(:modify_build_environment), name) + elsif formula =~ HOMEBREW_TAP_FORMULA_REGEX TapDependency.new(formula, tags, method(:modify_build_environment), name) elsif formula Dependency.new(formula, tags, method(:modify_build_environment), name) diff --git a/Library/Homebrew/test/formula_installer_spec.rb b/Library/Homebrew/test/formula_installer_spec.rb index d309a17da0..852677b07e 100644 --- a/Library/Homebrew/test/formula_installer_spec.rb +++ b/Library/Homebrew/test/formula_installer_spec.rb @@ -135,22 +135,22 @@ describe FormulaInstaller do }.to raise_error(CannotInstallFormulaError) end - describe "#install_requirement_formula?" do + describe "#install_requirement_formula?", :focus do before do @requirement = Python3Requirement.new + @requirement_dependency = @requirement.to_dependency + @install_bottle_for_dependent = false allow(@requirement).to receive(:satisfied?).and_return(satisfied?) allow(@requirement).to receive(:satisfied_by_formula?).and_return(satisfied_by_formula?) - allow_any_instance_of(Dependency).to receive(:installed?).and_return(installed?) @dependent = formula do url "foo" version "0.1" depends_on :python3 end - @build = BuildOptions.new [], [] @fi = FormulaInstaller.new(@dependent) end - subject { @fi.install_requirement_formula?(@requirement, @dependent, @build) } + subject { @fi.install_requirement_formula?(@requirement_dependency, @requirement, @install_bottle_for_dependent) } context "it returns false when requirement is satisfied" do let(:satisfied?) { true }