github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/filesystem/fsremove.go (about) 1 // Package filesystem - Content managed by Project Forge, see [projectforge.md] for details. 2 package filesystem 3 4 import ( 5 "path/filepath" 6 7 "github.com/pkg/errors" 8 9 "github.com/kyleu/dbaudit/app/util" 10 ) 11 12 func (f *FileSystem) Remove(path string, logger util.Logger) error { 13 p := f.getPath(path) 14 if logger != nil { 15 logger.Warnf("removing file at path [%s]", p) 16 } 17 if err := f.f.Remove(p); err != nil { 18 return errors.Wrapf(err, "error removing file [%s]", path) 19 } 20 return nil 21 } 22 23 func (f *FileSystem) RemoveRecursive(path string, logger util.Logger) error { 24 if !f.Exists(path) { 25 return nil 26 } 27 p := f.getPath(path) 28 s, err := f.f.Stat(p) 29 if err != nil { 30 return errors.Wrapf(err, "unable to stat file [%s]", path) 31 } 32 if s.IsDir() { 33 dir, e := f.f.Open(p) 34 if e != nil && logger != nil { 35 logger.Warnf("cannot open path [%s] for removal: %+v", path, e) 36 } 37 files, e := dir.Readdir(0) 38 if e != nil && logger != nil { 39 logger.Warnf("cannot read path [%s] for removal: %+v", path, e) 40 } 41 for _, file := range files { 42 err = f.RemoveRecursive(filepath.Join(path, file.Name()), logger) 43 if err != nil { 44 return err 45 } 46 } 47 } 48 err = f.f.Remove(p) 49 if err != nil { 50 return errors.Wrapf(err, "unable to remove file [%s]", path) 51 } 52 return nil 53 }