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:
parent
b4bb73a195
commit
b6d9268810
5 changed files with 16 additions and 15 deletions
|
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2
dnf-json
2
dnf-json
|
|
@ -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}")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue