ref: bfe800941538316ef213e9f3d2a7555a6dcff651
parent: 977b0e342c82f54a34e8612ea187101abc92d9ec
author: Bjørn Erik Pedersen <[email protected]>
date: Fri Mar 25 08:47:57 EDT 2016
helpers: Fix SymbolicWalk for the root folder handle the root folders themselves. This commit fixes that. Fixes #2018
--- a/helpers/path.go
+++ b/helpers/path.go
@@ -449,6 +449,22 @@
// 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 {
@@ -461,6 +477,18 @@
return nil
+}
+
+// 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