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 }