func main()

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