android13/development/tools/repo_diff/service/repodiff/persistence/filesystem/unix.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
}