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.
This commit is contained in:
Mike McQuaid 2017-07-30 16:56:24 +01:00
parent ac2cbd2137
commit a83baba8b5
3 changed files with 18 additions and 15 deletions

View File

@ -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

View File

@ -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)

View File

@ -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 }