dnf-json: support excluding packages

In our base distro definitions we exclude packages in addition to
including them. Extend dnf-json to support this, so we can depsolve
the base package set as well as the packages added in blueprints.

Signed-off-by: Tom Gundersen <teg@jklm.no>
This commit is contained in:
Tom Gundersen 2020-02-04 16:41:50 +01:00 committed by msehnout
parent b4bb73a195
commit b6d9268810
5 changed files with 16 additions and 15 deletions

View file

@ -29,7 +29,7 @@ func main() {
flag.Usage() flag.Usage()
return return
} }
// Validate architecture // Validate architecture
if !common.ArchitectureExists(archArg) { if !common.ArchitectureExists(archArg) {
_, _ = fmt.Fprintf(os.Stderr, "The provided architecture (%s) is not supported. Use one of these:\n", archArg) _, _ = fmt.Fprintf(os.Stderr, "The provided architecture (%s) is not supported. Use one of these:\n", archArg)
@ -47,7 +47,7 @@ func main() {
} }
return return
} }
// Validate image type // Validate image type
blueprint := &blueprint.Blueprint{} blueprint := &blueprint.Blueprint{}
@ -81,7 +81,7 @@ func main() {
} }
rpmmd := rpmmd.NewRPMMD() rpmmd := rpmmd.NewRPMMD()
_, checksums, err := rpmmd.Depsolve(packages, d.Repositories(archArg), true) _, checksums, err := rpmmd.Depsolve(packages, nil, d.Repositories(archArg), true)
if err != nil { if err != nil {
panic(err.Error()) panic(err.Error())
} }

View file

@ -109,7 +109,7 @@ elif command == "depsolve":
errors = [] errors = []
try: try:
base.install_specs(arguments["package-specs"]) base.install_specs(arguments["package-specs"], exclude=arguments.get("exclude-specs", []))
except dnf.exceptions.MarkingErrors as e: except dnf.exceptions.MarkingErrors as e:
exit_with_dnf_error("MarkingErrors", f"Error occurred when marking packages for installation: {e}") exit_with_dnf_error("MarkingErrors", f"Error occurred when marking packages for installation: {e}")

View file

@ -6,14 +6,14 @@ import (
) )
type fetchPackageList struct { type fetchPackageList struct {
ret rpmmd.PackageList ret rpmmd.PackageList
checksums map[string]string checksums map[string]string
err error err error
} }
type depsolve struct { type depsolve struct {
ret []rpmmd.PackageSpec ret []rpmmd.PackageSpec
checksums map[string]string checksums map[string]string
err error err error
} }
type Fixture struct { type Fixture struct {
@ -34,6 +34,6 @@ func (r *rpmmdMock) FetchPackageList(repos []rpmmd.RepoConfig) (rpmmd.PackageLis
return r.Fixture.fetchPackageList.ret, r.Fixture.fetchPackageList.checksums, r.Fixture.fetchPackageList.err return r.Fixture.fetchPackageList.ret, r.Fixture.fetchPackageList.checksums, r.Fixture.fetchPackageList.err
} }
func (r *rpmmdMock) Depsolve(specs []string, repos []rpmmd.RepoConfig, clean bool) ([]rpmmd.PackageSpec, map[string]string, error) { func (r *rpmmdMock) Depsolve(specs, excludeSpecs []string, repos []rpmmd.RepoConfig, clean bool) ([]rpmmd.PackageSpec, map[string]string, error) {
return r.Fixture.depsolve.ret, r.Fixture.fetchPackageList.checksums, r.Fixture.depsolve.err return r.Fixture.depsolve.ret, r.Fixture.fetchPackageList.checksums, r.Fixture.depsolve.err
} }

View file

@ -96,7 +96,7 @@ type PackageInfo struct {
type RPMMD interface { type RPMMD interface {
FetchPackageList(repos []RepoConfig) (PackageList, map[string]string, error) FetchPackageList(repos []RepoConfig) (PackageList, map[string]string, error)
Depsolve(specs []string, repos []RepoConfig, clean bool) ([]PackageSpec, map[string]string, error) Depsolve(specs, excludeSpecs []string, repos []RepoConfig, clean bool) ([]PackageSpec, map[string]string, error)
} }
type DNFError struct { type DNFError struct {
@ -214,12 +214,13 @@ func (*rpmmdImpl) FetchPackageList(repos []RepoConfig) (PackageList, map[string]
return reply.Packages, reply.Checksums, err return reply.Packages, reply.Checksums, err
} }
func (*rpmmdImpl) Depsolve(specs []string, repos []RepoConfig, clean bool) ([]PackageSpec, map[string]string, error) { func (*rpmmdImpl) Depsolve(specs, excludeSpecs []string, repos []RepoConfig, clean bool) ([]PackageSpec, map[string]string, error) {
var arguments = struct { var arguments = struct {
PackageSpecs []string `json:"package-specs"` PackageSpecs []string `json:"package-specs"`
ExcludSpecs []string `json:"exclude-specs"`
Repos []RepoConfig `json:"repos"` Repos []RepoConfig `json:"repos"`
Clean bool `json:"clean,omitempty"` Clean bool `json:"clean,omitempty"`
}{specs, repos, clean} }{specs, excludeSpecs, repos, clean}
var reply struct { var reply struct {
Checksums map[string]string `json:"checksums"` Checksums map[string]string `json:"checksums"`
Dependencies []PackageSpec `json:"dependencies"` Dependencies []PackageSpec `json:"dependencies"`
@ -281,6 +282,6 @@ func (packages PackageList) ToPackageInfos() []PackageInfo {
} }
func (pkg *PackageInfo) FillDependencies(rpmmd RPMMD, repos []RepoConfig) (err error) { func (pkg *PackageInfo) FillDependencies(rpmmd RPMMD, repos []RepoConfig) (err error) {
pkg.Dependencies, _, err = rpmmd.Depsolve([]string{pkg.Name}, repos, false) pkg.Dependencies, _, err = rpmmd.Depsolve([]string{pkg.Name}, nil, repos, false)
return return
} }

View file

@ -645,7 +645,7 @@ func (api *API) projectsDepsolveHandler(writer http.ResponseWriter, request *htt
names := strings.Split(params.ByName("projects"), ",") names := strings.Split(params.ByName("projects"), ",")
packages, _, err := api.rpmmd.Depsolve(names, api.distro.Repositories(api.arch), false) packages, _, err := api.rpmmd.Depsolve(names, nil, api.distro.Repositories(api.arch), false)
if err != nil { if err != nil {
errors := responseError{ errors := responseError{
@ -1817,7 +1817,7 @@ func (api *API) depsolveBlueprint(bp *blueprint.Blueprint, clean bool) ([]rpmmd.
repos = append(repos, source.RepoConfig()) repos = append(repos, source.RepoConfig())
} }
return api.rpmmd.Depsolve(specs, repos, clean) return api.rpmmd.Depsolve(specs, nil, repos, clean)
} }
func (api *API) uploadsScheduleHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) { func (api *API) uploadsScheduleHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) {