Add RemoveAll() and MkdirAll() to the filesystem implementation
This commit is contained in:
parent
03aadaa01b
commit
12d92afa0a
73
blefs/all.go
Normal file
73
blefs/all.go
Normal file
|
@ -0,0 +1,73 @@
|
|||
package blefs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (blefs *FS) RemoveAll(path string) error {
|
||||
if path == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
if filepath.Clean(path) == "/" {
|
||||
return ErrNoRemoveRoot
|
||||
}
|
||||
|
||||
fi, err := blefs.Stat(path)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if fi.IsDir() {
|
||||
return blefs.removeAllChildren(path)
|
||||
} else {
|
||||
err = blefs.Remove(path)
|
||||
if err != nil && err.(FSError).Code != -2 {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (blefs *FS) removeAllChildren(path string) error {
|
||||
list, err := blefs.ReadDir(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, entry := range list {
|
||||
if entry.IsDir() {
|
||||
err = blefs.removeAllChildren(filepath.Join(path, entry.Name()))
|
||||
} else {
|
||||
err = blefs.Remove(path)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (blefs *FS) MkdirAll(path string) error {
|
||||
if path == "" || path == "/" {
|
||||
return nil
|
||||
}
|
||||
|
||||
splitPath := strings.Split(path, "/")
|
||||
fmt.Println("p", path, splitPath)
|
||||
for i := 1; i < len(splitPath); i++ {
|
||||
curPath := strings.Join(splitPath[0:i], "/")
|
||||
fmt.Println("cp", curPath)
|
||||
|
||||
err := blefs.Mkdir(curPath)
|
||||
if err != nil && err.(FSError).Code != -17 {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Reference in a new issue