helpers: Fix SymbolicWalk for the root folder

handle the root folders themselves.

This commit fixes that.

Fixes #2018
This commit is contained in:
Bjørn Erik Pedersen 2016-03-25 12:47:57 +01:00
parent 977b0e342c
commit bfe8009415
1 changed files with 28 additions and 0 deletions

View File

@ -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) {