rpmmd: deduplicate RPM list based on NEVRA

Signed-off-by: Achilleas Koutsou <achilleas@koutsou.net>
This commit is contained in:
Achilleas Koutsou 2021-09-07 13:13:06 +02:00 committed by Ondřej Budai
parent e73d35d7c1
commit fbdc19f6d8

View file

@ -1,6 +1,8 @@
package rpmmd
import (
"fmt"
osbuild "github.com/osbuild/osbuild-composer/internal/osbuild2"
)
@ -15,6 +17,15 @@ type RPM struct {
Signature *string `json:"signature"`
}
// NEVRA string for the package
func (r RPM) String() string {
epoch := ""
if r.Epoch != nil {
epoch = *r.Epoch + ":"
}
return fmt.Sprintf("%s-%s%s-%s.%s", r.Name, epoch, r.Version, r.Release, r.Arch)
}
func OSBuildMetadataToRPMs(stagesMetadata map[string]osbuild.StageMetadata) []RPM {
rpms := make([]RPM, 0)
for _, md := range stagesMetadata {
@ -47,3 +58,17 @@ func PackageMetadataToSignature(pkg osbuild.RPMPackageMetadata) *string {
}
return nil
}
// Deduplicate a list of RPMs based on NEVRA string
func DeduplicateRPMs(rpms []RPM) []RPM {
rpmMap := make(map[string]struct{}, len(rpms))
uniqueRPMs := make([]RPM, 0, len(rpms))
for _, rpm := range rpms {
if _, added := rpmMap[rpm.String()]; !added {
rpmMap[rpm.String()] = struct{}{}
uniqueRPMs = append(uniqueRPMs, rpm)
}
}
return uniqueRPMs
}