aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike McQuaid2017-12-07 16:19:23 +0000
committerGitHub2017-12-07 16:19:23 +0000
commit360d7bc6f4cdea996b55c14d885a8b78da5dd7ad (patch)
tree49545521a6a2ca6a11afc9aff3cd59878b18a64f
parent34b03dea52b4f5134484eba1fcf277dca935a633 (diff)
parentb9cf7b2bbc9439080ad397574381b1e8bf1e1f9a (diff)
downloadbrew-360d7bc6f4cdea996b55c14d885a8b78da5dd7ad.tar.bz2
Merge pull request #3537 from MikeMcQuaid/avoid-irrelevant-build-deps
formula_installer: avoid irrelevant build deps.
-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