github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/filesystem/fstree.go (about)

     1  // Package filesystem - Content managed by Project Forge, see [projectforge.md] for details.
     2  package filesystem
     3  
     4  import (
     5  	"path"
     6  
     7  	"github.com/kyleu/dbaudit/app/util"
     8  )
     9  
    10  func (f *FileSystem) listNodes(pth string, ign []string, logger util.Logger, tags ...string) (Nodes, error) {
    11  	files := f.ListFiles(pth, ign, logger)
    12  	nodes := make(Nodes, 0, len(files))
    13  	for _, fi := range files {
    14  		x := path.Join(pth, fi.Name)
    15  		if fi.IsDir {
    16  			kids, err := f.listNodes(x, ign, logger)
    17  			if err != nil {
    18  				return nil, err
    19  			}
    20  			nodes = append(nodes, &Node{Name: fi.Name, Dir: true, Children: kids, Tags: tags})
    21  		} else {
    22  			nodes = append(nodes, &Node{Name: fi.Name, Tags: tags, Size: f.Size(x)})
    23  		}
    24  	}
    25  	return nodes.Sort(), nil
    26  }
    27  
    28  func (f *FileSystem) ListTree(cfg util.ValueMap, pth string, ign []string, logger util.Logger, tags ...string) (*Tree, error) {
    29  	nodes, err := f.listNodes(pth, ign, logger, tags...)
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  	return &Tree{Config: cfg, Nodes: nodes}, nil
    34  }