/
read_folders.go
91 lines (79 loc) · 2.23 KB
/
read_folders.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package io
import (
"os"
"path"
"path/filepath"
"strings"
"time"
"github.com/guionardo/go-dev/pkg/logger"
"github.com/schollz/progressbar/v3"
)
func ReadFolders(root string, maxSubLevel int) (subFolders []string, err error) {
intTerm := IsRunningFromInteractiveTerminal() && !logger.IsDebugMode()
var bar *progressbar.ProgressBar
logger.Info("Reading folders from %s (depth=%d)", root, maxSubLevel)
noIntLog := "Reading"
startTime := time.Now()
if intTerm {
bar = progressbar.Default(-1, noIntLog)
}
defer func() {
if bar != nil {
bar.Finish()
}
logger.Info("%s took %v to get %d folders", noIntLog, time.Since(startTime).String(), len(subFolders))
}()
subFolders, err = FolderReaderReadDir(root, maxSubLevel,
func(name string) bool {
if intTerm {
bar.Add(1)
}
return !strings.HasPrefix(name, ".") && !strings.HasPrefix(name, "_")
},
func(name string) {
logger.Debug("%s", name)
})
return
}
func ReadFolders_(root string, maxSubLevel int) ([]string, error) {
intTerm := IsRunningFromInteractiveTerminal() && !logger.IsDebugMode()
var bar *progressbar.ProgressBar
logger.Info("Reading folders from %s (depth=%d)", root, maxSubLevel)
noIntLog := "Reading"
startTime := time.Now()
devFolderLevel := len(strings.Split(root, string(os.PathSeparator)))
_subFolders := make([]string, 0, 1000)
if intTerm {
bar = progressbar.Default(-1, noIntLog)
}
defer func() {
if bar != nil {
bar.Finish()
}
logger.Info("%s took %v to get %d folders", noIntLog, time.Since(startTime).String(), len(_subFolders))
}()
err := filepath.WalkDir(path.Join(root, "."),
func(path string, info os.DirEntry, err error) error {
if intTerm {
bar.Add(1)
}
if err == nil && info.IsDir() && !DirectoryHasHiddenFolder(path) {
folderLevel := len(strings.Split(path, "/"))
if folderLevel-devFolderLevel <= maxSubLevel {
_subFolders = append(_subFolders, path)
logger.Debug("%s", path)
}
}
return nil
})
return _subFolders, err
}
func DirectoryHasHiddenFolder(directory string) bool {
folders := strings.Split(directory, string(os.PathSeparator))
for _, folder := range folders {
if len(folder) > 0 && (folder[0] == '.' || folder[0] == '_') {
return true
}
}
return false
}