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.
This commit is contained in:
parent
286d74eec2
commit
b9cf7b2bbc
@ -417,8 +417,9 @@ class FormulaInstaller
|
|||||||
raise UnsatisfiedRequirements, fatals
|
raise UnsatisfiedRequirements, fatals
|
||||||
end
|
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 unless req_dependency
|
||||||
|
return false if req.build? && dependent.installed?
|
||||||
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?
|
||||||
@ -451,7 +452,7 @@ class FormulaInstaller
|
|||||||
Requirement.prune
|
Requirement.prune
|
||||||
elsif req.build? && use_default_formula && req_dependency.installed?
|
elsif req.build? && use_default_formula && req_dependency.installed?
|
||||||
Requirement.prune
|
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)
|
deps.unshift(req_dependency)
|
||||||
formulae.unshift(req_dependency.to_formula)
|
formulae.unshift(req_dependency.to_formula)
|
||||||
Requirement.prune
|
Requirement.prune
|
||||||
@ -485,6 +486,8 @@ class FormulaInstaller
|
|||||||
Dependency.prune
|
Dependency.prune
|
||||||
elsif dep.build? && install_bottle_for?(dependent, build)
|
elsif dep.build? && install_bottle_for?(dependent, build)
|
||||||
Dependency.prune
|
Dependency.prune
|
||||||
|
elsif dep.build? && dependent.installed?
|
||||||
|
Dependency.prune
|
||||||
elsif dep.satisfied?(inherited_options[dep.name])
|
elsif dep.satisfied?(inherited_options[dep.name])
|
||||||
Dependency.skip
|
Dependency.skip
|
||||||
end
|
end
|
||||||
|
|||||||
@ -140,19 +140,22 @@ describe FormulaInstaller do
|
|||||||
@install_bottle_for_dependent = false
|
@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(@requirement).to receive(:build?).and_return(build?)
|
||||||
@dependent = formula do
|
@dependent = formula do
|
||||||
url "foo"
|
url "foo"
|
||||||
version "0.1"
|
version "0.1"
|
||||||
depends_on :python3
|
depends_on :python3
|
||||||
end
|
end
|
||||||
|
allow(@dependent).to receive(:installed?).and_return(installed?)
|
||||||
@fi = FormulaInstaller.new(@dependent)
|
@fi = FormulaInstaller.new(@dependent)
|
||||||
end
|
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
|
context "it returns false when requirement is satisfied" do
|
||||||
let(:satisfied?) { true }
|
let(:satisfied?) { true }
|
||||||
let(:satisfied_by_formula?) { false }
|
let(:satisfied_by_formula?) { false }
|
||||||
|
let(:build?) { false }
|
||||||
let(:installed?) { false }
|
let(:installed?) { false }
|
||||||
it { is_expected.to be false }
|
it { is_expected.to be false }
|
||||||
end
|
end
|
||||||
@ -160,6 +163,15 @@ describe FormulaInstaller do
|
|||||||
context "it returns false when requirement is satisfied but default formula is installed" do
|
context "it returns false when requirement is satisfied but default formula is installed" do
|
||||||
let(:satisfied?) { true }
|
let(:satisfied?) { true }
|
||||||
let(:satisfied_by_formula?) { false }
|
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 }
|
let(:installed?) { true }
|
||||||
it { is_expected.to be false }
|
it { is_expected.to be false }
|
||||||
end
|
end
|
||||||
@ -167,6 +179,7 @@ describe FormulaInstaller do
|
|||||||
context "it returns true when requirement isn't satisfied" do
|
context "it returns true when requirement isn't satisfied" do
|
||||||
let(:satisfied?) { false }
|
let(:satisfied?) { false }
|
||||||
let(:satisfied_by_formula?) { false }
|
let(:satisfied_by_formula?) { false }
|
||||||
|
let(:build?) { false }
|
||||||
let(:installed?) { false }
|
let(:installed?) { false }
|
||||||
it { is_expected.to be true }
|
it { is_expected.to be true }
|
||||||
end
|
end
|
||||||
@ -174,6 +187,7 @@ describe FormulaInstaller do
|
|||||||
context "it returns true when requirement is satisfied by a formula" do
|
context "it returns true when requirement is satisfied by a formula" do
|
||||||
let(:satisfied?) { true }
|
let(:satisfied?) { true }
|
||||||
let(:satisfied_by_formula?) { true }
|
let(:satisfied_by_formula?) { true }
|
||||||
|
let(:build?) { false }
|
||||||
let(:installed?) { false }
|
let(:installed?) { false }
|
||||||
it { is_expected.to be true }
|
it { is_expected.to be true }
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user