diff --git a/internal/testutil/baseline/baseline.go b/internal/testutil/baseline/baseline.go index fa28ce4979..2333b32544 100644 --- a/internal/testutil/baseline/baseline.go +++ b/internal/testutil/baseline/baseline.go @@ -146,12 +146,30 @@ func RunAgainstSubmodule(t *testing.T, fileName string, actual string, opts Opti writeComparison(t, actual, local, reference, true) } +var ( + mkdirAllCache sync.Map + mkdirAllCacheMarker any = new(int) +) + +func mkdirAllCached(t *testing.T, path string) error { + if _, ok := mkdirAllCache.Load(path); ok { + return nil + } + + if err := os.MkdirAll(path, 0o755); err != nil { + return err + } + + mkdirAllCache.Store(path, mkdirAllCacheMarker) + return nil +} + func writeComparison(t *testing.T, actualContent string, local, reference string, comparingAgainstSubmodule bool) { if actualContent == "" { panic("the generated content was \"\". Return 'baseline.NoContent' if no baselining is required.") } - if err := os.MkdirAll(filepath.Dir(local), 0o755); err != nil { + if err := mkdirAllCached(t, filepath.Dir(local)); err != nil { t.Error(fmt.Errorf("failed to create directories for the local baseline file %s: %w", local, err)) return }