api: fetch packages from sources and base repo

The package list is now generated from the base repo and the
user-defined repos. This allows users to add packages not found in the
base repo to their blueprints.
This commit is contained in:
Jacob Kozol 2019-11-06 15:00:40 +01:00 committed by Tom Gundersen
parent 085ba6fec9
commit 6f4a7bacd2

View file

@ -312,13 +312,29 @@ func (api *API) modulesListAllHandler(writer http.ResponseWriter, request *http.
return
}
total := uint(len(api.packages))
var repos []rpmmd.RepoConfig
repos = append(repos, api.repo)
for _, source := range api.store.GetAllSources() {
repos = append(repos, rpmmd.SourceToRepo(source))
}
packages, err := api.rpmmd.FetchPackageList(repos)
if err != nil {
errors := responseError{
ID: "ModulesError",
Msg: fmt.Sprintf("msg: %s", err.Error()),
}
statusResponseError(writer, http.StatusBadRequest, errors)
return
}
total := uint(len(packages))
start := min(offset, total)
n := min(limit, total-start)
modules := make([]modulesListModule, n)
for i := uint(0); i < n; i++ {
modules[i] = modulesListModule{api.packages[start+i].Name, "rpm"}
modules[i] = modulesListModule{packages[start+i].Name, "rpm"}
}
json.NewEncoder(writer).Encode(modulesListReply{
@ -347,6 +363,22 @@ func (api *API) modulesListHandler(writer http.ResponseWriter, request *http.Req
return
}
var repos []rpmmd.RepoConfig
repos = append(repos, api.repo)
for _, source := range api.store.GetAllSources() {
repos = append(repos, rpmmd.SourceToRepo(source))
}
packages, err := api.rpmmd.FetchPackageList(repos)
if err != nil {
errors := responseError{
ID: "ModulesError",
Msg: fmt.Sprintf("msg: %s", err.Error()),
}
statusResponseError(writer, http.StatusBadRequest, errors)
return
}
// we don't support glob-matching, but cockpit-composer surrounds some
// queries with asterisks; this is crude, but solves that case
for i := range names {
@ -357,7 +389,7 @@ func (api *API) modulesListHandler(writer http.ResponseWriter, request *http.Req
total := uint(0)
end := offset + limit
for i, name := range names {
for _, pkg := range api.packages {
for _, pkg := range packages {
if strings.Contains(pkg.Name, name) {
total++
if total > offset && total < end {
@ -432,6 +464,22 @@ func (api *API) modulesInfoHandler(writer http.ResponseWriter, request *http.Req
return
}
var repos []rpmmd.RepoConfig
repos = append(repos, api.repo)
for _, source := range api.store.GetAllSources() {
repos = append(repos, rpmmd.SourceToRepo(source))
}
packages, err := api.rpmmd.FetchPackageList(repos)
if err != nil {
errors := responseError{
ID: "ModulesError",
Msg: fmt.Sprintf("msg: %s", err.Error()),
}
statusResponseError(writer, http.StatusBadRequest, errors)
return
}
projects := make([]project, 0)
for i, name := range names {
// remove leading / from first name
@ -439,7 +487,7 @@ func (api *API) modulesInfoHandler(writer http.ResponseWriter, request *http.Req
name = name[1:]
}
first, n := api.packages.Search(name)
first, n := packages.Search(name)
if n == 0 {
errors := responseError{
ID: "UnknownModule",
@ -451,7 +499,7 @@ func (api *API) modulesInfoHandler(writer http.ResponseWriter, request *http.Req
// get basic info from the first package, but collect build
// information from all that have the same name
pkg := api.packages[first]
pkg := packages[first]
project := project{
Name: pkg.Name,
Summary: pkg.Summary,
@ -460,7 +508,7 @@ func (api *API) modulesInfoHandler(writer http.ResponseWriter, request *http.Req
}
project.Builds = make([]build, n)
for i, pkg := range api.packages[first : first+n] {
for i, pkg := range packages[first : first+n] {
project.Builds[i] = build{
Arch: pkg.Arch,
BuildTime: pkg.BuildTime,
@ -471,7 +519,7 @@ func (api *API) modulesInfoHandler(writer http.ResponseWriter, request *http.Req
}
if modulesRequested {
project.Dependencies, _ = api.rpmmd.Depsolve([]string{pkg.Name}, []rpmmd.RepoConfig{api.repo})
project.Dependencies, _ = api.rpmmd.Depsolve([]string{pkg.Name}, repos)
}
projects = append(projects, project)
@ -637,7 +685,14 @@ func (api *API) blueprintsDepsolveHandler(writer http.ResponseWriter, request *h
specs[i] += "-*-*.*"
}
}
dependencies, _ := api.rpmmd.Depsolve(specs, []rpmmd.RepoConfig{api.repo})
var repos []rpmmd.RepoConfig
repos = append(repos, api.repo)
for _, source := range api.store.GetAllSources() {
repos = append(repos, rpmmd.SourceToRepo(source))
}
dependencies, _ := api.rpmmd.Depsolve(specs, repos)
blueprints = append(blueprints, entry{blueprint, dependencies})
}