aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorMike McQuaid2017-12-07 14:56:12 +0000
committerMike McQuaid2017-12-07 14:56:12 +0000
commitb9cf7b2bbc9439080ad397574381b1e8bf1e1f9a (patch)
tree7fdbdfe231bdefe6b97a6b961d66095b00ebadf9 /Library/Homebrew
parent286d74eec2dad60562f81f9fc02043ad82466b5c (diff)
downloadbrew-b9cf7b2bbc9439080ad397574381b1e8bf1e1f9a.tar.bz2
formula_installer: avoid irrelevant build deps.
If dependents are already installed ensure their build dependencies (and requirements) don't end up in the dependency/requirement tree. Fixes #3033.
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/formula_installer.rb7
-rw-r--r--Library/Homebrew/test/formula_installer_spec.rb16
2 files changed, 20 insertions, 3 deletions
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index 77e0ab29b..10b0ae9cf 100644
--- a/Library/Homebrew/formula_installer.rb
+++ b/Library/Homebrew/formula_installer.rb
@@ -417,8 +417,9 @@ class FormulaInstaller
raise UnsatisfiedRequirements, fatals
end
- def install_requirement_formula?(req_dependency, req, install_bottle_for_dependent)
+ def install_requirement_formula?(req_dependency, req, dependent, install_bottle_for_dependent)
return false unless req_dependency
+ return false if req.build? && dependent.installed?
return true unless req.satisfied?
return false if req.run?
return true if build_bottle?
@@ -451,7 +452,7 @@ class FormulaInstaller
Requirement.prune
elsif req.build? && use_default_formula && req_dependency.installed?
Requirement.prune
- elsif install_requirement_formula?(req_dependency, req, install_bottle_for_dependent)
+ elsif install_requirement_formula?(req_dependency, req, dependent, install_bottle_for_dependent)
deps.unshift(req_dependency)
formulae.unshift(req_dependency.to_formula)
Requirement.prune
@@ -485,6 +486,8 @@ class FormulaInstaller
Dependency.prune
elsif dep.build? && install_bottle_for?(dependent, build)
Dependency.prune
+ elsif dep.build? && dependent.installed?
+ Dependency.prune
elsif dep.satisfied?(inherited_options[dep.name])
Dependency.skip
end
diff --git a/Library/Homebrew/test/formula_installer_spec.rb b/Library/Homebrew/test/formula_installer_spec.rb
index 1e3c04b68..b85e75b81 100644
--- a/Library/Homebrew/test/formula_installer_spec.rb
+++ b/Library/Homebrew/test/formula_installer_spec.rb
@@ -140,19 +140,22 @@ describe FormulaInstaller do
@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(@requirement).to receive(:build?).and_return(build?)
@dependent = formula do
url "foo"
version "0.1"
depends_on :python3
end
+ allow(@dependent).to receive(:installed?).and_return(installed?)
@fi = FormulaInstaller.new(@dependent)
end
- subject { @fi.install_requirement_formula?(@requirement_dependency, @requirement, @install_bottle_for_dependent) }
+ subject { @fi.install_requirement_formula?(@requirement_dependency, @requirement, @dependent, @install_bottle_for_dependent) }
context "it returns false when requirement is satisfied" do
let(:satisfied?) { true }
let(:satisfied_by_formula?) { false }
+ let(:build?) { false }
let(:installed?) { false }
it { is_expected.to be false }
end
@@ -160,6 +163,15 @@ describe FormulaInstaller do
context "it returns false when requirement is satisfied but default formula is installed" do
let(:satisfied?) { true }
let(:satisfied_by_formula?) { false }
+ let(:build?) { false }
+ let(:installed?) { false }
+ it { is_expected.to be false }
+ end
+
+ context "it returns false when requirement is :build and dependent is installed" do
+ let(:satisfied?) { false }
+ let(:satisfied_by_formula?) { false }
+ let(:build?) { true }
let(:installed?) { true }
it { is_expected.to be false }
end
@@ -167,6 +179,7 @@ describe FormulaInstaller do
context "it returns true when requirement isn't satisfied" do
let(:satisfied?) { false }
let(:satisfied_by_formula?) { false }
+ let(:build?) { false }
let(:installed?) { false }
it { is_expected.to be true }
end
@@ -174,6 +187,7 @@ describe FormulaInstaller do
context "it returns true when requirement is satisfied by a formula" do
let(:satisfied?) { true }
let(:satisfied_by_formula?) { true }
+ let(:build?) { false }
let(:installed?) { false }
it { is_expected.to be true }
end