rpmmd: deduplicate RPM list based on NEVRA
Signed-off-by: Achilleas Koutsou <achilleas@koutsou.net>
This commit is contained in:
parent
e73d35d7c1
commit
fbdc19f6d8
1 changed files with 25 additions and 0 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue