Merge pull request #13605 from Rylan12/api-merge-variations
Use `variations` hash when installing from the API
This commit is contained in:
commit
985f29f595
@ -136,6 +136,18 @@ module Formulary
|
|||||||
class_s = Formulary.class_s(name)
|
class_s = Formulary.class_s(name)
|
||||||
json_formula = Homebrew::API::Formula.all_formulae[name]
|
json_formula = Homebrew::API::Formula.all_formulae[name]
|
||||||
|
|
||||||
|
if (bottle_tag = Utils::Bottles.tag.to_s.presence) &&
|
||||||
|
(variations = json_formula["variations"].presence) &&
|
||||||
|
(variation = variations[bottle_tag].presence)
|
||||||
|
json_formula = json_formula.merge(variation)
|
||||||
|
end
|
||||||
|
|
||||||
|
uses_from_macos_names = json_formula["uses_from_macos"].map do |dep|
|
||||||
|
next dep unless dep.is_a? Hash
|
||||||
|
|
||||||
|
dep.keys.first
|
||||||
|
end
|
||||||
|
|
||||||
klass = Class.new(::Formula) do
|
klass = Class.new(::Formula) do
|
||||||
desc json_formula["desc"]
|
desc json_formula["desc"]
|
||||||
homepage json_formula["homepage"]
|
homepage json_formula["homepage"]
|
||||||
@ -176,20 +188,18 @@ module Formulary
|
|||||||
disable! date: disable_date, because: reason
|
disable! date: disable_date, because: reason
|
||||||
end
|
end
|
||||||
|
|
||||||
json_formula["build_dependencies"].each do |dep|
|
|
||||||
depends_on dep => :build
|
|
||||||
end
|
|
||||||
|
|
||||||
json_formula["dependencies"].each do |dep|
|
json_formula["dependencies"].each do |dep|
|
||||||
|
next if uses_from_macos_names.include? dep
|
||||||
|
|
||||||
depends_on dep
|
depends_on dep
|
||||||
end
|
end
|
||||||
|
|
||||||
json_formula["recommended_dependencies"].each do |dep|
|
[:build, :recommended, :optional].each do |type|
|
||||||
depends_on dep => :recommended
|
json_formula["#{type}_dependencies"].each do |dep|
|
||||||
end
|
next if uses_from_macos_names.include? dep
|
||||||
|
|
||||||
json_formula["optional_dependencies"].each do |dep|
|
depends_on dep => type
|
||||||
depends_on dep => :optional
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
json_formula["uses_from_macos"].each do |dep|
|
json_formula["uses_from_macos"].each do |dep|
|
||||||
|
|||||||
@ -260,6 +260,26 @@ describe Formulary do
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
let(:variations_json) do
|
||||||
|
{
|
||||||
|
"variations" => {
|
||||||
|
Utils::Bottles.tag.to_s => {
|
||||||
|
"dependencies" => ["dep", "variations_dep"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:linux_variations_json) do
|
||||||
|
{
|
||||||
|
"variations" => {
|
||||||
|
"x86_64_linux" => {
|
||||||
|
"dependencies" => ["dep", "uses_from_macos_dep"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow(described_class).to receive(:loader_for).and_return(described_class::FormulaAPILoader.new(formula_name))
|
allow(described_class).to receive(:loader_for).and_return(described_class::FormulaAPILoader.new(formula_name))
|
||||||
end
|
end
|
||||||
@ -303,6 +323,25 @@ describe Formulary do
|
|||||||
formula.install
|
formula.install
|
||||||
}.to raise_error("Cannot build from source from abstract formula.")
|
}.to raise_error("Cannot build from source from abstract formula.")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "returns a Formula with variations when given a name", :needs_macos do
|
||||||
|
allow(Homebrew::API::Formula).to receive(:all_formulae).and_return formula_json_contents(variations_json)
|
||||||
|
|
||||||
|
formula = described_class.factory(formula_name)
|
||||||
|
expect(formula).to be_kind_of(Formula)
|
||||||
|
expect(formula.deps.count).to eq 5
|
||||||
|
expect(formula.deps.map(&:name).include?("variations_dep")).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns a Formula without duplicated deps and uses_from_macos with variations on Linux", :needs_linux do
|
||||||
|
allow(Homebrew::API::Formula)
|
||||||
|
.to receive(:all_formulae).and_return formula_json_contents(linux_variations_json)
|
||||||
|
|
||||||
|
formula = described_class.factory(formula_name)
|
||||||
|
expect(formula).to be_kind_of(Formula)
|
||||||
|
expect(formula.deps.count).to eq 5
|
||||||
|
expect(formula.deps.map(&:name).include?("uses_from_macos_dep")).to be true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user