From 1c190cccca834265eca4fe91bc823e778e590388 Mon Sep 17 00:00:00 2001 From: Jason Bedard Date: Sun, 3 Dec 2023 20:18:22 -0800 Subject: [PATCH] perf(gazelle): cache fs check for BUILD files (#3951) GitOrigin-RevId: f2e0e86c9d5b5a9ceceb9451ef4a6fab97f7de35 --- gazelle/common/bazel.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gazelle/common/bazel.go b/gazelle/common/bazel.go index c8c61aa12..c1ae0931c 100644 --- a/gazelle/common/bazel.go +++ b/gazelle/common/bazel.go @@ -8,17 +8,27 @@ import ( var ( // BUILD file names. buildFileNames = []string{"BUILD", "BUILD.bazel"} + + // A set of already-seen Bazel packages so we avoid doing + // disk IO over and over to determine if a directory is a Bazel package. + isPackageCache = make(map[string]bool) ) // IsBazelPackage determines if the directory is a Bazel package by probing for // the existence of a known BUILD file name. func IsBazelPackage(dir string) bool { + if isPkg, cached := isPackageCache[dir]; cached { + return isPkg + } + for _, buildFilename := range buildFileNames { buildPath := path.Join(dir, buildFilename) if _, err := os.Stat(buildPath); err == nil { + isPackageCache[dir] = true return true } } + isPackageCache[dir] = false return false }