| 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 |
| } |