Speed up the Tap#formula_files and Tap#cask_files methods

These are slow because of some Pathname related reasons so it's been
changed up to use `Dir.glob` instead and that makes a large difference.

```
$ hyperfine --parameter-list branch master,speed-up-loading-cask-and-formula-file-names,speed-up-loading-cask-and-formula-file-names_v2 --warmup 5 --setup 'git switch {branch}' 'brew cat gimp'
Benchmark 1: brew cat gimp (branch = master)
  Time (mean ± σ):      2.150 s ±  0.014 s    [User: 1.369 s, System: 0.745 s]
  Range (min … max):    2.126 s …  2.174 s    10 runs

Benchmark 2: brew cat gimp (branch = speed-up-loading-cask-and-formula-file-names)
  Time (mean ± σ):      1.814 s ±  0.012 s    [User: 1.068 s, System: 0.711 s]
  Range (min … max):    1.797 s …  1.840 s    10 runs

Benchmark 3: brew cat gimp (branch = speed-up-loading-cask-and-formula-file-names_v2)
  Time (mean ± σ):      1.489 s ±  0.009 s    [User: 0.905 s, System: 0.550 s]
  Range (min … max):    1.478 s …  1.503 s    10 runs

Summary
  brew cat gimp (branch = speed-up-loading-cask-and-formula-file-names_v2) ran
    1.22 ± 0.01 times faster than brew cat gimp (branch = speed-up-loading-cask-and-formula-file-names)
    1.44 ± 0.01 times faster than brew cat gimp (branch = master)
```
This commit is contained in:
apainintheneck 2024-08-25 15:10:02 -07:00
parent 17e3bee3da
commit f3a5a3c449

View File

@ -712,10 +712,10 @@ class Tap
if formula_dir == path
# We only want the top level here so we don't treat commands & casks as formulae.
# Sharding is only supported in Formula/ and HomebrewFormula/.
formula_dir.children
Dir.glob(File.join(formula_dir.to_s, "*.rb"))
else
formula_dir.find
end.select { formula_file?(_1) }
Dir.glob(File.join(formula_dir.to_s, "**/*.rb"))
end.map { Pathname(_1) }
else
[]
end
@ -736,7 +736,7 @@ class Tap
sig { returns(T::Array[Pathname]) }
def cask_files
@cask_files ||= if cask_dir.directory?
cask_dir.find.select { ruby_file?(_1) }
Dir.glob(File.join(cask_dir.to_s, "**/*.rb")).map { Pathname(_1) }
else
[]
end