manifest: remove Content field from manifest

Do not expose the content of the manifest statically and instead rely on
the public methods to retrieve source specifications dynamically.

Since the methods require iterating through the pipelines to collect
source specifications, we should avoid calling the function multiple
times when we can reuse the returned values.
This commit is contained in:
Achilleas Koutsou 2023-06-02 17:39:29 +02:00 committed by Ondřej Budai
parent cecbc97e06
commit 5dba246813
20 changed files with 45 additions and 82 deletions

View file

@ -158,7 +158,7 @@ func makeManifestJob(name string, imgType distro.ImageType, cr composeRequest, d
return
}
packageSpecs, err := depsolve(cacheDir, manifest.Content.PackageSets, distribution, archName)
packageSpecs, err := depsolve(cacheDir, manifest.GetPackageSetChains(), distribution, archName)
if err != nil {
err = fmt.Errorf("[%s] depsolve failed: %s", filename, err.Error())
return
@ -172,12 +172,12 @@ func makeManifestJob(name string, imgType distro.ImageType, cr composeRequest, d
bp = blueprint.Blueprint(*cr.Blueprint)
}
containerSpecs, err := resolvePipelineContainers(manifest.Content.Containers, archName)
containerSpecs, err := resolvePipelineContainers(manifest.GetContainerSourceSpecs(), archName)
if err != nil {
return fmt.Errorf("[%s] container resolution failed: %s", filename, err.Error())
}
commitSpecs := resolvePipelineCommits(manifest.Content.OSTreeCommits)
commitSpecs := resolvePipelineCommits(manifest.GetOSTreeSourceSpecs())
mf, err := manifest.Serialize(packageSpecs, containerSpecs, commitSpecs)
if err != nil {

View file

@ -64,7 +64,7 @@ func TestCrossArchDepsolve(t *testing.T) {
repos[archStr], 0)
assert.NoError(t, err)
for _, set := range manifest.Content.PackageSets {
for _, set := range manifest.GetPackageSetChains() {
_, err = solver.Depsolve(set)
assert.NoError(t, err)
}
@ -101,7 +101,7 @@ func TestDepsolvePackageSets(t *testing.T) {
manifestSource, _, err := qcow2Image.Manifest(&blueprint.Blueprint{Packages: []blueprint.Package{{Name: "bind"}}}, distro.ImageOptions{}, x86Repos, 0)
require.Nilf(t, err, "failed to initialise manifest for %q image type of %q/%q distro/arch", qcow2ImageTypeName, cs9.Name(), platform.ARCH_X86_64.String())
imagePkgSets := manifestSource.Content.PackageSets
imagePkgSets := manifestSource.GetPackageSetChains()
gotPackageSpecsSets := make(map[string][]rpmmd.PackageSpec, len(imagePkgSets))
for name, pkgSet := range imagePkgSets {

View file

@ -57,5 +57,5 @@ func main() {
if err != nil {
panic(err)
}
_ = encoder.Encode(manifest.Content.PackageSets)
_ = encoder.Encode(manifest.GetPackageSetChains())
}

View file

@ -201,7 +201,7 @@ func main() {
}
depsolvedSets := make(map[string][]rpmmd.PackageSpec)
for name, pkgSet := range manifest.Content.PackageSets {
for name, pkgSet := range manifest.GetPackageSetChains() {
res, err := solver.Depsolve(pkgSet)
if err != nil {
panic("Could not depsolve: " + err.Error())
@ -209,8 +209,9 @@ func main() {
depsolvedSets[name] = res
}
containers := make(map[string][]container.Spec, len(manifest.Content.Containers))
for name, sourceSpecs := range manifest.Content.Containers {
containerSources := manifest.GetContainerSourceSpecs()
containers := make(map[string][]container.Spec, len(containerSources))
for name, sourceSpecs := range containerSources {
containerSpecs, err := resolveContainers(sourceSpecs, arch.Name())
if err != nil {
panic("Could not resolve containers: " + err.Error())
@ -219,8 +220,9 @@ func main() {
}
// "resolve" ostree commits by copying the source specs into commit specs
commits := make(map[string][]ostree.CommitSpec, len(manifest.Content.OSTreeCommits))
for name, commitSources := range manifest.Content.OSTreeCommits {
commitSources := manifest.GetOSTreeSourceSpecs()
commits := make(map[string][]ostree.CommitSpec, len(commitSources))
for name, commitSources := range commitSources {
commitSpecs := make([]ostree.CommitSpec, len(commitSources))
for idx, commitSource := range commitSources {
commitSpecs[idx] = ostree.CommitSpec{

View file

@ -28,7 +28,7 @@ func getManifest(bp blueprint.Blueprint, t distro.ImageType, a distro.Arch, d di
}
pkgSpecSets := make(map[string][]rpmmd.PackageSpec)
solver := dnfjson.NewSolver(d.ModulePlatformID(), d.Releasever(), a.Name(), d.Name(), cacheDir)
for name, packages := range manifest.Content.PackageSets {
for name, packages := range manifest.GetPackageSetChains() {
res, err := solver.Depsolve(packages)
if err != nil {
panic(err)