internal: pass architecture from the APIs to dnf-json
The following commit will introduce support for forced architecture in dnf-json. The APIs already have this kind of information, so we can simply pass it to the Depsolve and FetchMetadata functions.
This commit is contained in:
parent
6f1c461c32
commit
9d2dacbcab
6 changed files with 24 additions and 22 deletions
|
|
@ -28,7 +28,7 @@ func TestFetchChecksum(t *testing.T) {
|
|||
IgnoreSSL: true,
|
||||
}
|
||||
rpmMetadata := rpmmd.NewRPMMD(path.Join(dir, "rpmmd"))
|
||||
_, c, err := rpmMetadata.FetchMetadata([]rpmmd.RepoConfig{repoCfg}, "platform:f31")
|
||||
_, c, err := rpmMetadata.FetchMetadata([]rpmmd.RepoConfig{repoCfg}, "platform:f31", "x86_64")
|
||||
assert.Nilf(t, err, "Failed to fetch checksum: %v", err)
|
||||
assert.NotEqual(t, "", c["repo"], "The checksum is empty")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,13 +121,13 @@ func main() {
|
|||
}
|
||||
|
||||
rpmmd := rpmmd.NewRPMMD(path.Join(home, ".cache/osbuild-composer/rpmmd"))
|
||||
packageSpecs, checksums, err := rpmmd.Depsolve(packages, exclude_pkgs, repos[arch.Name()], distro.ModulePlatformID())
|
||||
packageSpecs, checksums, err := rpmmd.Depsolve(packages, exclude_pkgs, repos[arch.Name()], distro.ModulePlatformID(), arch.Name())
|
||||
if err != nil {
|
||||
panic("Could not depsolve: " + err.Error())
|
||||
}
|
||||
|
||||
buildPkgs := imageType.BuildPackages()
|
||||
buildPackageSpecs, _, err := rpmmd.Depsolve(buildPkgs, nil, repos[arch.Name()], distro.ModulePlatformID())
|
||||
buildPackageSpecs, _, err := rpmmd.Depsolve(buildPkgs, nil, repos[arch.Name()], distro.ModulePlatformID(), arch.Name())
|
||||
if err != nil {
|
||||
panic("Could not depsolve build packages: " + err.Error())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,10 +30,10 @@ func NewRPMMDMock(fixture Fixture) rpmmd.RPMMD {
|
|||
return &rpmmdMock{Fixture: fixture}
|
||||
}
|
||||
|
||||
func (r *rpmmdMock) FetchMetadata(repos []rpmmd.RepoConfig, modulePlatformID string) (rpmmd.PackageList, map[string]string, error) {
|
||||
func (r *rpmmdMock) FetchMetadata(repos []rpmmd.RepoConfig, modulePlatformID string, arch string) (rpmmd.PackageList, map[string]string, error) {
|
||||
return r.Fixture.fetchPackageList.ret, r.Fixture.fetchPackageList.checksums, r.Fixture.fetchPackageList.err
|
||||
}
|
||||
|
||||
func (r *rpmmdMock) Depsolve(specs, excludeSpecs []string, repos []rpmmd.RepoConfig, modulePlatformID string) ([]rpmmd.PackageSpec, map[string]string, error) {
|
||||
func (r *rpmmdMock) Depsolve(specs, excludeSpecs []string, repos []rpmmd.RepoConfig, modulePlatformID, arch string) ([]rpmmd.PackageSpec, map[string]string, error) {
|
||||
return r.Fixture.depsolve.ret, r.Fixture.fetchPackageList.checksums, r.Fixture.depsolve.err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,15 +83,15 @@ func notFoundHandler(writer http.ResponseWriter, request *http.Request) {
|
|||
|
||||
// Depsolves packages and build packages for building an image for a given
|
||||
// distro, in the given architecture
|
||||
func depsolve(rpmmd rpmmd.RPMMD, distro distro.Distro, imageType distro.ImageType, repos []rpmmd.RepoConfig) ([]rpmmd.PackageSpec, []rpmmd.PackageSpec, error) {
|
||||
func depsolve(rpmmd rpmmd.RPMMD, distro distro.Distro, imageType distro.ImageType, repos []rpmmd.RepoConfig, arch distro.Arch) ([]rpmmd.PackageSpec, []rpmmd.PackageSpec, error) {
|
||||
specs, excludeSpecs := imageType.BasePackages()
|
||||
packages, _, err := rpmmd.Depsolve(specs, excludeSpecs, repos, distro.ModulePlatformID())
|
||||
packages, _, err := rpmmd.Depsolve(specs, excludeSpecs, repos, distro.ModulePlatformID(), arch.Name())
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("RPMMD.Depsolve: %v", err)
|
||||
}
|
||||
|
||||
specs = imageType.BuildPackages()
|
||||
buildPackages, _, err := rpmmd.Depsolve(specs, nil, repos, distro.ModulePlatformID())
|
||||
buildPackages, _, err := rpmmd.Depsolve(specs, nil, repos, distro.ModulePlatformID(), arch.Name())
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("RPMMD.Depsolve: %v", err)
|
||||
}
|
||||
|
|
@ -195,7 +195,7 @@ func (api *API) submit(writer http.ResponseWriter, request *http.Request, _ http
|
|||
})
|
||||
}
|
||||
|
||||
packages, buildPackages, err := depsolve(api.rpmMetadata, distro, imageType, repoConfigs)
|
||||
packages, buildPackages, err := depsolve(api.rpmMetadata, distro, imageType, repoConfigs, arch)
|
||||
if err != nil {
|
||||
writer.WriteHeader(http.StatusBadRequest)
|
||||
_, err := writer.Write([]byte(err.Error()))
|
||||
|
|
|
|||
|
|
@ -98,12 +98,12 @@ type PackageInfo struct {
|
|||
type RPMMD interface {
|
||||
// FetchMetadata returns all metadata about the repositories we use in the code. Specifically it is a
|
||||
// list of packages and dictionary of checksums of the repositories.
|
||||
FetchMetadata(repos []RepoConfig, modulePlatformID string) (PackageList, map[string]string, error)
|
||||
FetchMetadata(repos []RepoConfig, modulePlatformID string, arch string) (PackageList, map[string]string, error)
|
||||
|
||||
// Depsolve takes a list of required content (specs), explicitly unwanted content (excludeSpecs), list
|
||||
// or repositories, and platform ID for modularity. It returns a list of all packages (with solved
|
||||
// dependencies) that will be installed into the system.
|
||||
Depsolve(specs, excludeSpecs []string, repos []RepoConfig, modulePlatformID string) ([]PackageSpec, map[string]string, error)
|
||||
Depsolve(specs, excludeSpecs []string, repos []RepoConfig, modulePlatformID, arch string) ([]PackageSpec, map[string]string, error)
|
||||
}
|
||||
|
||||
type DNFError struct {
|
||||
|
|
@ -221,12 +221,13 @@ func NewRPMMD(cacheDir string) RPMMD {
|
|||
}
|
||||
}
|
||||
|
||||
func (r *rpmmdImpl) FetchMetadata(repos []RepoConfig, modulePlatformID string) (PackageList, map[string]string, error) {
|
||||
func (r *rpmmdImpl) FetchMetadata(repos []RepoConfig, modulePlatformID string, arch string) (PackageList, map[string]string, error) {
|
||||
var arguments = struct {
|
||||
Repos []RepoConfig `json:"repos"`
|
||||
CacheDir string `json:"cachedir"`
|
||||
ModulePlatformID string `json:"module_platform_id"`
|
||||
}{repos, r.CacheDir, modulePlatformID}
|
||||
Arch string `json:"arch"`
|
||||
}{repos, r.CacheDir, modulePlatformID, arch}
|
||||
var reply struct {
|
||||
Checksums map[string]string `json:"checksums"`
|
||||
Packages PackageList `json:"packages"`
|
||||
|
|
@ -238,14 +239,15 @@ func (r *rpmmdImpl) FetchMetadata(repos []RepoConfig, modulePlatformID string) (
|
|||
return reply.Packages, reply.Checksums, err
|
||||
}
|
||||
|
||||
func (r *rpmmdImpl) Depsolve(specs, excludeSpecs []string, repos []RepoConfig, modulePlatformID string) ([]PackageSpec, map[string]string, error) {
|
||||
func (r *rpmmdImpl) Depsolve(specs, excludeSpecs []string, repos []RepoConfig, modulePlatformID, arch string) ([]PackageSpec, map[string]string, error) {
|
||||
var arguments = struct {
|
||||
PackageSpecs []string `json:"package-specs"`
|
||||
ExcludSpecs []string `json:"exclude-specs"`
|
||||
Repos []RepoConfig `json:"repos"`
|
||||
CacheDir string `json:"cachedir"`
|
||||
ModulePlatformID string `json:"module_platform_id"`
|
||||
}{specs, excludeSpecs, repos, r.CacheDir, modulePlatformID}
|
||||
Arch string `json:"arch"`
|
||||
}{specs, excludeSpecs, repos, r.CacheDir, modulePlatformID, arch}
|
||||
var reply struct {
|
||||
Checksums map[string]string `json:"checksums"`
|
||||
Dependencies []PackageSpec `json:"dependencies"`
|
||||
|
|
@ -306,7 +308,7 @@ func (packages PackageList) ToPackageInfos() []PackageInfo {
|
|||
return results
|
||||
}
|
||||
|
||||
func (pkg *PackageInfo) FillDependencies(rpmmd RPMMD, repos []RepoConfig, modulePlatformID string) (err error) {
|
||||
pkg.Dependencies, _, err = rpmmd.Depsolve([]string{pkg.Name}, nil, repos, modulePlatformID)
|
||||
func (pkg *PackageInfo) FillDependencies(rpmmd RPMMD, repos []RepoConfig, modulePlatformID string, arch string) (err error) {
|
||||
pkg.Dependencies, _, err = rpmmd.Depsolve([]string{pkg.Name}, nil, repos, modulePlatformID, arch)
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -632,7 +632,7 @@ func (api *API) modulesInfoHandler(writer http.ResponseWriter, request *http.Req
|
|||
|
||||
if modulesRequested {
|
||||
for i := range packageInfos {
|
||||
err := packageInfos[i].FillDependencies(api.rpmmd, api.repos, api.distro.ModulePlatformID())
|
||||
err := packageInfos[i].FillDependencies(api.rpmmd, api.repos, api.distro.ModulePlatformID(), api.arch.Name())
|
||||
if err != nil {
|
||||
errors := responseError{
|
||||
ID: errorId,
|
||||
|
|
@ -663,7 +663,7 @@ func (api *API) projectsDepsolveHandler(writer http.ResponseWriter, request *htt
|
|||
|
||||
names := strings.Split(params.ByName("projects"), ",")
|
||||
|
||||
packages, _, err := api.rpmmd.Depsolve(names, nil, api.repos, api.distro.ModulePlatformID())
|
||||
packages, _, err := api.rpmmd.Depsolve(names, nil, api.repos, api.distro.ModulePlatformID(), api.arch.Name())
|
||||
|
||||
if err != nil {
|
||||
errors := responseError{
|
||||
|
|
@ -1963,7 +1963,7 @@ func (api *API) fetchPackageList() (rpmmd.PackageList, error) {
|
|||
repos = append(repos, source.RepoConfig())
|
||||
}
|
||||
|
||||
packages, _, err := api.rpmmd.FetchMetadata(repos, api.distro.ModulePlatformID())
|
||||
packages, _, err := api.rpmmd.FetchMetadata(repos, api.distro.ModulePlatformID(), api.arch.Name())
|
||||
return packages, err
|
||||
}
|
||||
|
||||
|
|
@ -1999,7 +1999,7 @@ func (api *API) depsolveBlueprint(bp *blueprint.Blueprint, imageType distro.Imag
|
|||
excludeSpecs = append(excludePackages, excludeSpecs...)
|
||||
}
|
||||
|
||||
packages, _, err := api.rpmmd.Depsolve(specs, excludeSpecs, repos, api.distro.ModulePlatformID())
|
||||
packages, _, err := api.rpmmd.Depsolve(specs, excludeSpecs, repos, api.distro.ModulePlatformID(), api.arch.Name())
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
|
@ -2007,7 +2007,7 @@ func (api *API) depsolveBlueprint(bp *blueprint.Blueprint, imageType distro.Imag
|
|||
buildPackages := []rpmmd.PackageSpec{}
|
||||
if imageType != nil {
|
||||
buildSpecs := imageType.BuildPackages()
|
||||
buildPackages, _, err = api.rpmmd.Depsolve(buildSpecs, nil, repos, api.distro.ModulePlatformID())
|
||||
buildPackages, _, err = api.rpmmd.Depsolve(buildSpecs, nil, repos, api.distro.ModulePlatformID(), api.arch.Name())
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue