Merge pull request #2969 from MikeMcQuaid/default-formula-bottles

formula_installer: use default_formula for bottles
This commit is contained in:
Mike McQuaid 2017-07-30 18:41:10 +01:00 committed by GitHub
commit e755505c70
3 changed files with 18 additions and 15 deletions

View File

@ -402,14 +402,13 @@ class FormulaInstaller
raise UnsatisfiedRequirements, fatals raise UnsatisfiedRequirements, fatals
end end
def install_requirement_formula?(req, dependent, build) def install_requirement_formula?(req_dependency, req, install_bottle_for_dependent)
req_dependency = req.to_dependency
return false unless req_dependency return false unless req_dependency
return true unless req.satisfied? return true unless req.satisfied?
return false if req.run? return false if req.run?
return true if build_bottle? return true if build_bottle?
return true if req.satisfied_by_formula? return true if req.satisfied_by_formula?
install_bottle_for?(dependent, build) install_bottle_for_dependent
end end
def runtime_requirements(formula) def runtime_requirements(formula)
@ -429,19 +428,21 @@ class FormulaInstaller
runtime_requirements = runtime_requirements(f) runtime_requirements = runtime_requirements(f)
f.recursive_requirements do |dependent, req| f.recursive_requirements do |dependent, req|
build = effective_build_options_for(dependent) 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) if (req.optional? || req.recommended?) && build.without?(req)
Requirement.prune Requirement.prune
elsif req.build? && install_bottle_for?(dependent, build) elsif req.build? && install_bottle_for_dependent
Requirement.prune Requirement.prune
elsif install_requirement_formula?(req, dependent, build) elsif install_requirement_formula?(req_dependency, req, install_bottle_for_dependent)
dep = req.to_dependency deps.unshift(req_dependency)
deps.unshift(dep) formulae.unshift(req_dependency.to_formula)
formulae.unshift(dep.to_formula)
Requirement.prune Requirement.prune
elsif req.satisfied? elsif req.satisfied?
Requirement.prune Requirement.prune
elsif !runtime_requirements.include?(req) && install_bottle_for?(dependent, build) elsif !runtime_requirements.include?(req) && install_bottle_for_dependent
Requirement.prune Requirement.prune
else else
unsatisfied_reqs[dependent] << req unsatisfied_reqs[dependent] << req

View File

@ -129,8 +129,10 @@ class Requirement
!@formula.nil? !@formula.nil?
end end
def to_dependency def to_dependency(use_default_formula: false)
if formula =~ HOMEBREW_TAP_FORMULA_REGEX 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) TapDependency.new(formula, tags, method(:modify_build_environment), name)
elsif formula elsif formula
Dependency.new(formula, tags, method(:modify_build_environment), name) Dependency.new(formula, tags, method(:modify_build_environment), name)

View File

@ -133,22 +133,22 @@ describe FormulaInstaller do
}.to raise_error(CannotInstallFormulaError) }.to raise_error(CannotInstallFormulaError)
end end
describe "#install_requirement_formula?" do describe "#install_requirement_formula?", :focus do
before do before do
@requirement = Python3Requirement.new @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?).and_return(satisfied?)
allow(@requirement).to receive(:satisfied_by_formula?).and_return(satisfied_by_formula?) 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 @dependent = formula do
url "foo" url "foo"
version "0.1" version "0.1"
depends_on :python3 depends_on :python3
end end
@build = BuildOptions.new [], []
@fi = FormulaInstaller.new(@dependent) @fi = FormulaInstaller.new(@dependent)
end 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 context "it returns false when requirement is satisfied" do
let(:satisfied?) { true } let(:satisfied?) { true }