76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package filesystem
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type mapperFn func([]string) (interface{}, error)
|
|
|
|
func CSVFileToEntities(csvFile string, mapper mapperFn) ([]interface{}, error) {
|
|
var errMapping error
|
|
var entityRows []interface{}
|
|
|
|
errReading := GenerateCSVLines(
|
|
csvFile,
|
|
func(columns []string) {
|
|
if errMapping != nil {
|
|
return
|
|
}
|
|
var entity interface{}
|
|
entity, errMapping = mapper(columns)
|
|
if errMapping == nil {
|
|
entityRows = append(entityRows, entity)
|
|
}
|
|
},
|
|
)
|
|
if errReading != nil {
|
|
return nil, errors.Wrap(errReading, fmt.Sprintf("Error reading %s file from filesystem", csvFile))
|
|
}
|
|
if errMapping != nil {
|
|
return nil, errors.Wrap(errMapping, "Error mapping CSV lines to entities")
|
|
}
|
|
return entityRows, nil
|
|
}
|
|
|
|
func FindFnamesInDir(directory string, filenames ...string) []string {
|
|
var outputFilenames []string
|
|
for _, filename := range filenames {
|
|
findProjectsCmd := fmt.Sprintf("find %s | grep %s", directory, filename)
|
|
out, err := exec.Command("bash", "-c", findProjectsCmd).Output()
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
outputFilenames = append(
|
|
outputFilenames,
|
|
filterEmptyStrings(strings.Split(string(out), "\n"))...,
|
|
)
|
|
}
|
|
return outputFilenames
|
|
}
|
|
|
|
func filterEmptyStrings(strings []string) []string {
|
|
filtered := make([]string, len(strings)-countEmpty(strings))
|
|
copyToIndex := 0
|
|
for _, str := range strings {
|
|
if str != "" {
|
|
filtered[copyToIndex] = str
|
|
copyToIndex++
|
|
}
|
|
}
|
|
return filtered
|
|
}
|
|
|
|
func countEmpty(strings []string) int {
|
|
numEmpty := 0
|
|
for _, str := range strings {
|
|
if str == "" {
|
|
numEmpty++
|
|
}
|
|
}
|
|
return numEmpty
|
|
}
|