aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMike McQuaid2017-07-30 16:56:24 +0100
committerMike McQuaid2017-07-30 16:56:24 +0100
commita83baba8b50e29e680b89588ca19347ac0133608 (patch)
tree4566834d29ee6d553cc9d5367f7e6592bc2ac7f3 /Library
parentac2cbd2137006ebfe84d8584ccdcb5d78c1130d9 (diff)
downloadbrew-a83baba8b50e29e680b89588ca19347ac0133608.tar.bz2
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.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/formula_installer.rb19
-rw-r--r--Library/Homebrew/requirement.rb6
-rw-r--r--Library/Homebrew/test/formula_installer_spec.rb8
3 files changed, 18 insertions, 15 deletions
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index a0c091e7f..d1c2bd08d 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 cfb925b49..1ec8580c4 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 d309a17da..852677b07 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 }