shithub: hugo

Download patch

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