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  }