71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
|
package dir
|
||
|
|
||
|
import "strings"
|
||
|
|
||
|
// Dir holds directory information to insert into templates
|
||
|
type Dir struct {
|
||
|
List [][]string
|
||
|
Blacklist []string
|
||
|
}
|
||
|
|
||
|
// Exists checks if a directory exists or not
|
||
|
func (d *Dir) Exists(newDir string) bool {
|
||
|
for _, dir := range d.Blacklist {
|
||
|
if dir == newDir {
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
// Parse a directory to build a list of directories to be made at b0x.go
|
||
|
func (d *Dir) Parse(newDir string) []string {
|
||
|
list := strings.Split(newDir, "/")
|
||
|
|
||
|
var dirWalk []string
|
||
|
|
||
|
for indx := range list {
|
||
|
dirList := ""
|
||
|
for i := -1; i < indx; i++ {
|
||
|
dirList += list[i+1] + "/"
|
||
|
}
|
||
|
|
||
|
if !d.Exists(dirList) {
|
||
|
if strings.HasSuffix(dirList, "//") {
|
||
|
dirList = dirList[:len(dirList)-1]
|
||
|
}
|
||
|
|
||
|
dirWalk = append(dirWalk, dirList)
|
||
|
d.Blacklist = append(d.Blacklist, dirList)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return dirWalk
|
||
|
}
|
||
|
|
||
|
// Insert a new folder to the list
|
||
|
func (d *Dir) Insert(newDir string) {
|
||
|
if !d.Exists(newDir) {
|
||
|
d.Blacklist = append(d.Blacklist, newDir)
|
||
|
d.List = append(d.List, d.Parse(newDir))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Clean dupes
|
||
|
func (d *Dir) Clean() []string {
|
||
|
var cleanList []string
|
||
|
|
||
|
for _, dirs := range d.List {
|
||
|
for _, dir := range dirs {
|
||
|
if dir == "./" || dir == "/" || dir == "." || dir == "" {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
cleanList = append(cleanList, dir)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return cleanList
|
||
|
}
|