// appendMatchingImages updates matchingImages with image metadata records from images which belong to the // specified region. If an image already exists in matchingImages, it is not overwritten. func appendMatchingImages(source simplestreams.DataSource, matchingImages []interface{}, images map[string]interface{}, cons simplestreams.LookupConstraint) []interface{} { imagesMap := make(map[imageKey]*ImageMetadata, len(matchingImages)) for _, val := range matchingImages { im := val.(*ImageMetadata) imagesMap[imageKey{im.VirtType, im.Arch, im.Version, im.RegionName, im.Storage}] = im } for _, val := range images { im := val.(*ImageMetadata) if cons != nil && cons.Params().Region != "" && cons.Params().Region != im.RegionName { continue } if _, ok := imagesMap[imageKey{im.VirtType, im.Arch, im.Version, im.RegionName, im.Storage}]; !ok { matchingImages = append(matchingImages, im) } } return matchingImages }
// appendMatchingTools updates matchingTools with tools metadata records from tools which belong to the // specified series. If a tools record already exists in matchingTools, it is not overwritten. func appendMatchingTools(source simplestreams.DataSource, matchingTools []interface{}, tools map[string]interface{}, cons simplestreams.LookupConstraint) []interface{} { toolsMap := make(map[version.Binary]*ToolsMetadata, len(matchingTools)) for _, val := range matchingTools { tm := val.(*ToolsMetadata) toolsMap[tm.binary()] = tm } for _, val := range tools { tm := val.(*ToolsMetadata) if !set.NewStrings(cons.Params().Series...).Contains(tm.Release) { continue } if toolsConstraint, ok := cons.(*ToolsConstraint); ok { tmNumber := version.MustParse(tm.Version) if toolsConstraint.Version == version.Zero { if toolsConstraint.Released && tmNumber.IsDev() { continue } if toolsConstraint.MajorVersion >= 0 && toolsConstraint.MajorVersion != tmNumber.Major { continue } if toolsConstraint.MinorVersion >= 0 && toolsConstraint.MinorVersion != tmNumber.Minor { continue } } else { if toolsConstraint.Version != tmNumber { continue } } } if _, ok := toolsMap[tm.binary()]; !ok { tm.FullPath, _ = source.URL(tm.Path) matchingTools = append(matchingTools, tm) } } return matchingTools }