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
|
package rpmmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
osbuild "github.com/osbuild/osbuild-composer/internal/osbuild2"
|
osbuild "github.com/osbuild/osbuild-composer/internal/osbuild2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -15,6 +17,15 @@ type RPM struct {
|
||||||
Signature *string `json:"signature"`
|
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 {
|
func OSBuildMetadataToRPMs(stagesMetadata map[string]osbuild.StageMetadata) []RPM {
|
||||||
rpms := make([]RPM, 0)
|
rpms := make([]RPM, 0)
|
||||||
for _, md := range stagesMetadata {
|
for _, md := range stagesMetadata {
|
||||||
|
|
@ -47,3 +58,17 @@ func PackageMetadataToSignature(pkg osbuild.RPMPackageMetadata) *string {
|
||||||
}
|
}
|
||||||
return nil
|
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