cmd/audit: improve performance of versioned formula names
There is a check for other versioned formula with the same name in the file audit. This just memoizes all of the versioned formulae in a tap during the first call and then uses that much shorter list everytime it checks for things.
This commit is contained in:
parent
184efd9eab
commit
7e05a9b574
@ -489,20 +489,19 @@ class Formula
|
|||||||
name.include?("@")
|
name.include?("@")
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns any `@`-versioned formulae names for any formula (including versioned formulae).
|
# Returns any other `@`-versioned formulae names for any formula (including versioned formulae).
|
||||||
sig { returns(T::Array[String]) }
|
sig { returns(T::Array[String]) }
|
||||||
def versioned_formulae_names
|
def versioned_formulae_names
|
||||||
versioned_names = if tap
|
versioned_names = if tap
|
||||||
name_prefix = "#{name.gsub(/(@[\d.]+)?$/, "")}@"
|
name_prefix = name.gsub(/(@[\d.]+)?$/, "")
|
||||||
T.must(tap).formula_names.select do |name|
|
T.must(tap).prefix_to_versioned_formulae_names.fetch(name_prefix, [])
|
||||||
name.start_with?(name_prefix)
|
|
||||||
end
|
|
||||||
elsif path.exist?
|
elsif path.exist?
|
||||||
Pathname.glob(path.to_s.gsub(/(@[\d.]+)?\.rb$/, "@*.rb"))
|
Pathname.glob(path.to_s.gsub(/(@[\d.]+)?\.rb$/, "@*.rb"))
|
||||||
.map { |path| path.basename(".rb").to_s }
|
.map { |path| path.basename(".rb").to_s }
|
||||||
|
.sort
|
||||||
else
|
else
|
||||||
raise "Either tap or path is required to list versioned formulae"
|
raise "Either tap or path is required to list versioned formulae"
|
||||||
end.sort
|
end
|
||||||
|
|
||||||
versioned_names.reject do |versioned_name|
|
versioned_names.reject do |versioned_name|
|
||||||
versioned_name == name
|
versioned_name == name
|
||||||
|
@ -644,6 +644,17 @@ class Tap
|
|||||||
@formula_names ||= formula_files.map(&method(:formula_file_to_name))
|
@formula_names ||= formula_files.map(&method(:formula_file_to_name))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# A hash of all {Formula} name prefixes to versioned {Formula} in this {Tap}.
|
||||||
|
# @private
|
||||||
|
sig { returns(T::Hash[String, T::Array[String]]) }
|
||||||
|
def prefix_to_versioned_formulae_names
|
||||||
|
@prefix_to_versioned_formulae_names ||= formula_names
|
||||||
|
.select { |name| name.include?("@") }
|
||||||
|
.group_by { |name| name.gsub(/(@[\d.]+)?$/, "") }
|
||||||
|
.transform_values(&:sort)
|
||||||
|
.freeze
|
||||||
|
end
|
||||||
|
|
||||||
# An array of all {Cask} tokens of this {Tap}.
|
# An array of all {Cask} tokens of this {Tap}.
|
||||||
sig { returns(T::Array[String]) }
|
sig { returns(T::Array[String]) }
|
||||||
def cask_tokens
|
def cask_tokens
|
||||||
|
Loading…
x
Reference in New Issue
Block a user