From bfe800941538316ef213e9f3d2a7555a6dcff651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 25 Mar 2016 12:47:57 +0100 Subject: [PATCH] helpers: Fix SymbolicWalk for the root folder handle the root folders themselves. This commit fixes that. Fixes #2018 --- helpers/path.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/helpers/path.go b/helpers/path.go index 34b7675fc..5f1e83398 100644 --- a/helpers/path.go +++ b/helpers/path.go @@ -449,6 +449,22 @@ func FindCWD() (string, error) { // symbolic link. It will still not follow symbolic links deeper down in // the file structure func SymbolicWalk(fs afero.Fs, root string, walker filepath.WalkFunc) error { + + // Handle the root first + fileInfo, err := lstatIfOs(fs, root) + + if err != nil || !fileInfo.IsDir() { + return nil + } + + if err != nil { + return walker(root, nil, err) + } + + if err := walker(root, fileInfo, err); err != nil && err != filepath.SkipDir { + return err + } + rootContent, err := afero.ReadDir(fs, root) if err != nil { @@ -463,6 +479,18 @@ func SymbolicWalk(fs afero.Fs, root string, walker filepath.WalkFunc) error { } +// Code copied from Afero's path.go +// if the filesystem is OsFs use Lstat, else use fs.Stat +func lstatIfOs(fs afero.Fs, path string) (info os.FileInfo, err error) { + _, ok := fs.(*afero.OsFs) + if ok { + info, err = os.Lstat(path) + } else { + info, err = fs.Stat(path) + } + return +} + // SafeWriteToDisk is the same as WriteToDisk // but it also checks to see if file/directory already exists. func SafeWriteToDisk(inpath string, r io.Reader, fs afero.Fs) (err error) {