Introduce tag for implicit dependencies
This commit is contained in:
parent
d1b923f314
commit
71d51faa55
@ -191,6 +191,7 @@ module Homebrew
|
||||
str = "#{str} [test]" if dep.test?
|
||||
str = "#{str} [optional]" if dep.optional?
|
||||
str = "#{str} [recommended]" if dep.recommended?
|
||||
str = "#{str} [implicit]" if dep.implicit?
|
||||
end
|
||||
|
||||
str
|
||||
|
||||
@ -9,7 +9,7 @@ require "options"
|
||||
module Dependable
|
||||
# `:run` and `:linked` are no longer used but keep them here to avoid their
|
||||
# misuse in future.
|
||||
RESERVED_TAGS = [:build, :optional, :recommended, :run, :test, :linked].freeze
|
||||
RESERVED_TAGS = [:build, :optional, :recommended, :run, :test, :linked, :implicit].freeze
|
||||
|
||||
attr_reader :tags
|
||||
|
||||
@ -29,6 +29,10 @@ module Dependable
|
||||
tags.include? :test
|
||||
end
|
||||
|
||||
def implicit?
|
||||
tags.include? :implicit
|
||||
end
|
||||
|
||||
def required?
|
||||
!build? && !test? && !optional? && !recommended?
|
||||
end
|
||||
|
||||
@ -180,7 +180,12 @@ class Dependency
|
||||
option_names = deps.flat_map(&:option_names).uniq
|
||||
kwargs = {}
|
||||
kwargs[:bounds] = dep.bounds if dep.uses_from_macos?
|
||||
dep.class.new(name, tags, dep.env_proc, option_names, **kwargs)
|
||||
# TODO: simpify to just **kwargs when we require Ruby >= 2.7
|
||||
if kwargs.empty?
|
||||
dep.class.new(name, tags, dep.env_proc, option_names)
|
||||
else
|
||||
dep.class.new(name, tags, dep.env_proc, option_names, **kwargs)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -208,10 +213,10 @@ class Dependency
|
||||
end
|
||||
|
||||
def merge_temporality(deps)
|
||||
# Means both build and runtime dependency.
|
||||
return [] unless deps.all?(&:build?)
|
||||
|
||||
[:build]
|
||||
new_tags = []
|
||||
new_tags << :build if deps.all?(&:build?)
|
||||
new_tags << :implicit if deps.all?(&:implicit?)
|
||||
new_tags
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -84,37 +84,37 @@ class DependencyCollector
|
||||
def git_dep_if_needed(tags)
|
||||
return if Utils::Git.available?
|
||||
|
||||
Dependency.new("git", tags)
|
||||
Dependency.new("git", [*tags, :implicit])
|
||||
end
|
||||
|
||||
def curl_dep_if_needed(tags)
|
||||
Dependency.new("curl", tags)
|
||||
Dependency.new("curl", [*tags, :implicit])
|
||||
end
|
||||
|
||||
def subversion_dep_if_needed(tags)
|
||||
return if Utils::Svn.available?
|
||||
|
||||
Dependency.new("subversion", tags)
|
||||
Dependency.new("subversion", [*tags, :implicit])
|
||||
end
|
||||
|
||||
def cvs_dep_if_needed(tags)
|
||||
Dependency.new("cvs", tags) unless which("cvs")
|
||||
Dependency.new("cvs", [*tags, :implicit]) unless which("cvs")
|
||||
end
|
||||
|
||||
def xz_dep_if_needed(tags)
|
||||
Dependency.new("xz", tags) unless which("xz")
|
||||
Dependency.new("xz", [*tags, :implicit]) unless which("xz")
|
||||
end
|
||||
|
||||
def zstd_dep_if_needed(tags)
|
||||
Dependency.new("zstd", tags) unless which("zstd")
|
||||
Dependency.new("zstd", [*tags, :implicit]) unless which("zstd")
|
||||
end
|
||||
|
||||
def unzip_dep_if_needed(tags)
|
||||
Dependency.new("unzip", tags) unless which("unzip")
|
||||
Dependency.new("unzip", [*tags, :implicit]) unless which("unzip")
|
||||
end
|
||||
|
||||
def bzip2_dep_if_needed(tags)
|
||||
Dependency.new("bzip2", tags) unless which("bzip2")
|
||||
Dependency.new("bzip2", [*tags, :implicit]) unless which("bzip2")
|
||||
end
|
||||
|
||||
def self.tar_needs_xz_dependency?
|
||||
@ -127,6 +127,8 @@ class DependencyCollector
|
||||
def init_global_dep_tree_if_needed!; end
|
||||
|
||||
def parse_spec(spec, tags)
|
||||
raise ArgumentError, "Implicit dependencies cannot be manually specified" if tags.include?(:implicit)
|
||||
|
||||
case spec
|
||||
when String
|
||||
parse_string_spec(spec, tags)
|
||||
@ -184,11 +186,11 @@ class DependencyCollector
|
||||
elsif strategy <= SubversionDownloadStrategy
|
||||
subversion_dep_if_needed(tags)
|
||||
elsif strategy <= MercurialDownloadStrategy
|
||||
Dependency.new("mercurial", tags)
|
||||
Dependency.new("mercurial", [*tags, :implicit])
|
||||
elsif strategy <= FossilDownloadStrategy
|
||||
Dependency.new("fossil", tags)
|
||||
Dependency.new("fossil", [*tags, :implicit])
|
||||
elsif strategy <= BazaarDownloadStrategy
|
||||
Dependency.new("breezy", tags)
|
||||
Dependency.new("breezy", [*tags, :implicit])
|
||||
elsif strategy <= CVSDownloadStrategy
|
||||
cvs_dep_if_needed(tags)
|
||||
elsif strategy < AbstractDownloadStrategy
|
||||
@ -204,10 +206,10 @@ class DependencyCollector
|
||||
when ".zst" then zstd_dep_if_needed(tags)
|
||||
when ".zip" then unzip_dep_if_needed(tags)
|
||||
when ".bz2" then bzip2_dep_if_needed(tags)
|
||||
when ".lha", ".lzh" then Dependency.new("lha", tags)
|
||||
when ".lz" then Dependency.new("lzip", tags)
|
||||
when ".rar" then Dependency.new("libarchive", tags)
|
||||
when ".7z" then Dependency.new("p7zip", tags)
|
||||
when ".lha", ".lzh" then Dependency.new("lha", [*tags, :implicit])
|
||||
when ".lz" then Dependency.new("lzip", [*tags, :implicit])
|
||||
when ".rar" then Dependency.new("libarchive", [*tags, :implicit])
|
||||
when ".7z" then Dependency.new("p7zip", [*tags, :implicit])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -17,7 +17,7 @@ class DependencyCollector
|
||||
return if global_dep_tree[GCC]&.intersect?(related_formula_names)
|
||||
return unless formula_for(GCC)
|
||||
|
||||
Dependency.new(GCC)
|
||||
Dependency.new(GCC, [:implicit])
|
||||
end
|
||||
|
||||
sig { params(related_formula_names: T::Set[String]).returns(T.nilable(Dependency)) }
|
||||
@ -28,7 +28,7 @@ class DependencyCollector
|
||||
return if global_dep_tree[GLIBC]&.intersect?(related_formula_names)
|
||||
return unless formula_for(GLIBC)
|
||||
|
||||
Dependency.new(GLIBC)
|
||||
Dependency.new(GLIBC, [:implicit])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@ -8,11 +8,11 @@ class DependencyCollector
|
||||
def git_dep_if_needed(tags); end
|
||||
|
||||
def subversion_dep_if_needed(tags)
|
||||
Dependency.new("subversion", tags)
|
||||
Dependency.new("subversion", [*tags, :implicit])
|
||||
end
|
||||
|
||||
def cvs_dep_if_needed(tags)
|
||||
Dependency.new("cvs", tags)
|
||||
Dependency.new("cvs", [*tags, :implicit])
|
||||
end
|
||||
|
||||
def xz_dep_if_needed(tags); end
|
||||
|
||||
@ -52,13 +52,13 @@ describe DependencyCollector do
|
||||
it "creates a resource dependency from a CVS URL" do
|
||||
resource = Resource.new
|
||||
resource.url(":pserver:anonymous:@brew.sh:/cvsroot/foo/bar", using: :cvs)
|
||||
expect(collector.add(resource)).to eq(Dependency.new("cvs", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("cvs", [:build, :test, :implicit]))
|
||||
end
|
||||
|
||||
it "creates a resource dependency from a '.7z' URL" do
|
||||
resource = Resource.new
|
||||
resource.url("https://brew.sh/foo.7z")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("p7zip", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("p7zip", [:build, :test, :implicit]))
|
||||
end
|
||||
|
||||
it "creates a resource dependency from a '.gz' URL" do
|
||||
@ -70,25 +70,25 @@ describe DependencyCollector do
|
||||
it "creates a resource dependency from a '.lz' URL" do
|
||||
resource = Resource.new
|
||||
resource.url("https://brew.sh/foo.lz")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("lzip", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("lzip", [:build, :test, :implicit]))
|
||||
end
|
||||
|
||||
it "creates a resource dependency from a '.lha' URL" do
|
||||
resource = Resource.new
|
||||
resource.url("https://brew.sh/foo.lha")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("lha", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("lha", [:build, :test, :implicit]))
|
||||
end
|
||||
|
||||
it "creates a resource dependency from a '.lzh' URL" do
|
||||
resource = Resource.new
|
||||
resource.url("https://brew.sh/foo.lzh")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("lha", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("lha", [:build, :test, :implicit]))
|
||||
end
|
||||
|
||||
it "creates a resource dependency from a '.rar' URL" do
|
||||
resource = Resource.new
|
||||
resource.url("https://brew.sh/foo.rar")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("libarchive", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("libarchive", [:build, :test, :implicit]))
|
||||
end
|
||||
|
||||
it "raises a TypeError for unknown classes" do
|
||||
|
||||
@ -14,19 +14,19 @@ describe DependencyCollector do
|
||||
it "creates a resource dependency from a '.xz' URL" do
|
||||
resource.url("https://brew.sh/foo.xz")
|
||||
allow_any_instance_of(Object).to receive(:which).with("xz")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("xz", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("xz", [:build, :test, :implicit]))
|
||||
end
|
||||
|
||||
it "creates a resource dependency from a '.zip' URL" do
|
||||
resource.url("https://brew.sh/foo.zip")
|
||||
allow_any_instance_of(Object).to receive(:which).with("unzip")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("unzip", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("unzip", [:build, :test, :implicit]))
|
||||
end
|
||||
|
||||
it "creates a resource dependency from a '.bz2' URL" do
|
||||
resource.url("https://brew.sh/foo.tar.bz2")
|
||||
allow_any_instance_of(Object).to receive(:which).with("bzip2")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("bzip2", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("bzip2", [:build, :test, :implicit]))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -34,6 +34,6 @@ describe DependencyCollector do
|
||||
specify "Resource dependency from a Subversion URL" do
|
||||
resource = Resource.new
|
||||
resource.url("svn://brew.sh/foo/bar")
|
||||
expect(collector.add(resource)).to eq(Dependency.new("subversion", [:build, :test]))
|
||||
expect(collector.add(resource)).to eq(Dependency.new("subversion", [:build, :test, :implicit]))
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user