in contrib/go/cmd/metadata_merge/metadata_merge.go [95:135]
func main() {
var yamlFiles strArgList
flag.Var(&yamlFiles, "yamlFile", "Path to an input YAML file to process. Can be specified multiple times to process more than one file.")
flag.Parse()
log.Println("Running the YAML Metadata merger.")
for _, f := range yamlFiles.Args {
log.Println("-yamlFile", f)
}
log.Println("-outFile", *outFile)
if len(yamlFiles.Args) == 0 {
log.Fatalf("No input YAML files provided. Use the -yamlFile flag to provide at least 1 YAML file.")
}
if *outFile == "" {
log.Fatalf("-outFile was not specified.")
}
result := metadataYAML{tagsLookup: make(map[string]bool)}
for _, yamlFile := range yamlFiles.Args {
log.Println("Loading metadata from", yamlFile)
blob, err := ioutil.ReadFile(yamlFile)
if err != nil {
log.Fatalf("Unable to read data from %s: %v", yamlFile, err)
}
m := new(metadataYAML)
if err := yaml.UnmarshalStrict(blob, m); err != nil {
log.Fatalf("Unable to parse data read from %s as metadata YAML: %v", yamlFile, err)
}
if err := result.merge(m); err != nil {
log.Fatalf("Unable to merge metadata read from %s into a single merged YAML: %v", yamlFile, err)
}
}
log.Printf("Merged YAML has %d tags and %d packages.", len(result.Tags), len(result.Packages))
blob, err := yaml.Marshal(&result)
if err != nil {
log.Fatalf("Unable to generate a merged YAML blob for the output merged YAML file: %v", err)
}
if err := ioutil.WriteFile(*outFile, blob, os.FileMode(0644)); err != nil {
log.Fatalf("Unable to write %d bytes of content to output YAML file %s: %v", len(blob), *outFile, err)
}
log.Printf("Successfully generated output %s that merged %d YAML files.", *outFile, len(yamlFiles.Args))
}