in contrib/go/cmd/packages_metadata/packages_metadata.go [55:88]
func newPackagesMetadataFromCSV(csvFile string) (*metadata.PackagesMetadata, error) {
result := new(metadata.PackagesMetadata)
f, err := os.Open(csvFile)
if err != nil {
return nil, errors.Wrapf(err, "unable to open %s for reading", csvFile)
}
r := csv.NewReader(f)
header, err := r.Read()
if err != nil {
return nil, errors.Wrapf(err, "unable to read CSV header from %s", csvFile)
}
if len(header) != 2 || header[0] != "Name" || header[1] != "Version" {
return nil, fmt.Errorf("unexpected CSV header in %s, got %s, want Name,Version", csvFile, strings.Join(header, ","))
}
for {
record, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
return nil, errors.Wrapf(err, "error parsing record in CSV file %s", csvFile)
}
result.Packages = append(result.Packages, metadata.PackageMetadata{
Name: record[0],
Version: record[1],
})
}
// Sort the packages in alphabetical order of their names.
sort.Slice(result.Packages, func(i, j int) bool {
pi, pj := result.Packages[i], result.Packages[j]
return strings.Compare(pi.Name, pj.Name) < 0
})
return result, nil
}