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?("@")
|
||||
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]) }
|
||||
def versioned_formulae_names
|
||||
versioned_names = if tap
|
||||
name_prefix = "#{name.gsub(/(@[\d.]+)?$/, "")}@"
|
||||
T.must(tap).formula_names.select do |name|
|
||||
name.start_with?(name_prefix)
|
||||
end
|
||||
name_prefix = name.gsub(/(@[\d.]+)?$/, "")
|
||||
T.must(tap).prefix_to_versioned_formulae_names.fetch(name_prefix, [])
|
||||
elsif path.exist?
|
||||
Pathname.glob(path.to_s.gsub(/(@[\d.]+)?\.rb$/, "@*.rb"))
|
||||
.map { |path| path.basename(".rb").to_s }
|
||||
.sort
|
||||
else
|
||||
raise "Either tap or path is required to list versioned formulae"
|
||||
end.sort
|
||||
end
|
||||
|
||||
versioned_names.reject do |versioned_name|
|
||||
versioned_name == name
|
||||
|
@ -644,6 +644,17 @@ class Tap
|
||||
@formula_names ||= formula_files.map(&method(:formula_file_to_name))
|
||||
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}.
|
||||
sig { returns(T::Array[String]) }
|
||||
def cask_tokens
|
||||
|
Loading…
x
Reference in New Issue
Block a user