From 8016b821a260840ccb81ef520f2804b9482f3820 Mon Sep 17 00:00:00 2001 From: Teppei Fukuda Date: Sat, 4 May 2024 09:34:54 +0400 Subject: [PATCH] fix(fs): handle default skip dirs properly (#6628) Signed-off-by: knqyf263 --- pkg/fanal/walker/fs.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/fanal/walker/fs.go b/pkg/fanal/walker/fs.go index 8255585192d..f6bec84d1fc 100644 --- a/pkg/fanal/walker/fs.go +++ b/pkg/fanal/walker/fs.go @@ -23,8 +23,8 @@ func NewFS() *FS { // Walk walks the filesystem rooted at root, calling fn for each unfiltered file. func (w *FS) Walk(root string, opt Option, fn WalkFunc) error { opt.SkipFiles = w.BuildSkipPaths(root, opt.SkipFiles) - opt.SkipDirs = append(opt.SkipDirs, defaultSkipDirs...) opt.SkipDirs = w.BuildSkipPaths(root, opt.SkipDirs) + opt.SkipDirs = append(opt.SkipDirs, defaultSkipDirs...) walkDirFunc := w.WalkDirFunc(root, fn, opt) walkDirFunc = w.onError(walkDirFunc) @@ -50,24 +50,24 @@ func (w *FS) WalkDirFunc(root string, fn WalkFunc, opt Option) fs.WalkDirFunc { } relPath = filepath.ToSlash(relPath) - info, err := d.Info() - if err != nil { - return xerrors.Errorf("file info error: %w", err) - } - // Skip unnecessary files switch { - case info.IsDir(): + case d.IsDir(): if SkipPath(relPath, opt.SkipDirs) { return filepath.SkipDir } return nil - case !info.Mode().IsRegular(): + case !d.Type().IsRegular(): return nil case SkipPath(relPath, opt.SkipFiles): return nil } + info, err := d.Info() + if err != nil { + return xerrors.Errorf("file info error: %w", err) + } + if err = fn(relPath, info, fileOpener(filePath)); err != nil { return xerrors.Errorf("failed to analyze file: %w", err) } @@ -83,7 +83,7 @@ func (w *FS) onError(wrapped fs.WalkDirFunc) fs.WalkDirFunc { // Unwrap fs.SkipDir error case errors.Is(err, fs.SkipDir): return fs.SkipDir - // ignore permission errors + // Ignore permission errors case os.IsPermission(err): return nil case err != nil: