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:
parent
085ba6fec9
commit
6f4a7bacd2
1 changed files with 63 additions and 8 deletions
|
|
@ -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})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue