From fdb05d8407805843ae2eeb0f65f28628497699ed Mon Sep 17 00:00:00 2001 From: Jan De Dobbeleer Date: Wed, 2 Nov 2022 15:04:20 +0100 Subject: [PATCH] feat(print): improve performance --- src/environment/shell.go | 14 ++++++-------- src/main_test.go | 13 +++++++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/environment/shell.go b/src/environment/shell.go index bb955d58..13a205c8 100644 --- a/src/environment/shell.go +++ b/src/environment/shell.go @@ -365,28 +365,26 @@ func (env *ShellEnvironment) Pwd() string { func (env *ShellEnvironment) HasFiles(pattern string) bool { defer env.Trace(time.Now(), "HasFiles", pattern) cwd := env.Pwd() - pattern = cwd + env.PathSeparator() + pattern - matches, err := filepath.Glob(pattern) + fileSystem := os.DirFS(cwd) + matches, err := fs.Glob(fileSystem, pattern) if err != nil { env.Log(Error, "HasFiles", err.Error()) return false } for _, match := range matches { - f, _ := os.Stat(match) - if f.IsDir() { + file, err := fs.Stat(fileSystem, match) + if err != nil || file.IsDir() { continue } - env.Log(Debug, "HasFiles", "true") return true } - env.Log(Debug, "HasFiles", "false") return false } func (env *ShellEnvironment) HasFilesInDir(dir, pattern string) bool { defer env.Trace(time.Now(), "HasFilesInDir", pattern) - pattern = dir + env.PathSeparator() + pattern - matches, err := filepath.Glob(pattern) + fileSystem := os.DirFS(dir) + matches, err := fs.Glob(fileSystem, pattern) if err != nil { env.Log(Error, "HasFilesInDir", err.Error()) return false diff --git a/src/main_test.go b/src/main_test.go index 41eadcf7..d00ec3e6 100644 --- a/src/main_test.go +++ b/src/main_test.go @@ -8,6 +8,7 @@ import ( func BenchmarkInit(b *testing.B) { cmd := cli.RootCmd + // needs to be a non-existing file as we panic otherwise cmd.SetArgs([]string{"init", "fish", "--print", "--config", "err.omp.json"}) out := bytes.NewBufferString("") cmd.SetOut(out) @@ -16,3 +17,15 @@ func BenchmarkInit(b *testing.B) { _ = cmd.Execute() } } + +func BenchmarkPrimary(b *testing.B) { + cmd := cli.RootCmd + // needs to be a non-existing file as we panic otherwise + cmd.SetArgs([]string{"print", "primary", "--config", "err.omp.json", "--pwd", "/Users/jan/Code/oh-my-posh/src"}) + out := bytes.NewBufferString("") + cmd.SetOut(out) + + for i := 0; i < b.N; i++ { + _ = cmd.Execute() + } +}