debian-forge-composer/internal/rpmmd/metadata.go
Tomas Hozza 8e6826e743 Move OSBuildMetadataToRPMs and PackageMetadataToSignature to osbuild2
Move `OSBuildMetadataToRPMs()` and `PackageMetadataToSignature()`
functions from the `rpmmd` package to `osbuild2` package to prevent
import cycles while de-duplicating `rpmStageInputs()` function from
`stage_inputs.go` of distro definitions.

Rename `PackageMetadataToSignature()` to
`RPMPackageMetadataToSignature()`, since it takes specifically
`RPMPackageMetadata` type as an argument.

Adjust affected parts of code (unit tests, cloudapi, worker).

Signed-off-by: Tomas Hozza <thozza@redhat.com>
2022-02-18 09:26:35 +01:00

39 lines
934 B
Go

package rpmmd
import (
"fmt"
)
type RPM struct {
Type string `json:"type"` // must be 'rpm'
Name string `json:"name"`
Version string `json:"version"`
Release string `json:"release"`
Epoch *string `json:"epoch,omitempty"`
Arch string `json:"arch"`
Sigmd5 string `json:"sigmd5"`
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)
}
// 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
}