weldr: remove Composer interface

No need to have an interface we don't really use yet. This moves
fetching the list of packages out of weldr, which will ease testing.
This commit is contained in:
Lars Karlitski 2019-09-14 07:41:39 +02:00
parent 1adbf1a4a6
commit dd3b837d8d
2 changed files with 27 additions and 49 deletions

32
main.go
View file

@ -11,32 +11,24 @@ import (
"osbuild-composer/weldr"
)
type Composer struct{}
func (c *Composer) Repositories() []string {
return []string{"fedora-30"}
}
func (c *Composer) RepositoryConfig(name string) (rpmmd.RepoConfig, bool) {
if name != "fedora-30" {
return rpmmd.RepoConfig{}, false
}
return rpmmd.RepoConfig{
Id: "fedora-30",
Name: "Fedora 30",
Metalink: "https://mirrors.fedoraproject.org/metalink?repo=fedora-30&arch=x86_64",
}, true
}
func main() {
listener, err := net.Listen("unix", "/run/weldr/api.socket")
if err != nil {
panic(err)
}
composer := Composer{}
api := weldr.New(&composer)
repo := rpmmd.RepoConfig{
Id: "fedora-30",
Name: "Fedora 30",
Metalink: "https://mirrors.fedoraproject.org/metalink?repo=fedora-30&arch=x86_64",
}
packages, err := rpmmd.FetchPackageList(repo)
if err != nil {
panic(err)
}
api := weldr.New(repo, packages)
server := http.Server{Handler: api}
shutdownDone := make(chan struct{}, 1)

View file

@ -13,33 +13,19 @@ import (
)
type API struct {
store *store
composer Composer
store *store
baseRepo rpmmd.RepoConfig
repo rpmmd.RepoConfig
packages rpmmd.PackageList
router *httprouter.Router
}
type Composer interface {
Repositories() []string
RepositoryConfig(name string) (rpmmd.RepoConfig, bool)
}
func New(composer Composer) *API {
func New(repo rpmmd.RepoConfig, packages rpmmd.PackageList) *API {
api := &API{
composer: composer,
store: newStore(),
}
// only one repository right now
api.baseRepo, _ = composer.RepositoryConfig(composer.Repositories()[0])
var err error
api.packages, err = rpmmd.FetchPackageList(api.baseRepo)
if err != nil {
panic(err)
repo: repo,
packages: packages,
}
// sample blueprint
@ -142,7 +128,7 @@ func (api *API) sourceListHandler(writer http.ResponseWriter, request *http.Requ
}
json.NewEncoder(writer).Encode(reply{
Sources: []string{api.baseRepo.Name},
Sources: []string{api.repo.Name},
})
}
@ -164,27 +150,27 @@ func (api *API) sourceInfoHandler(writer http.ResponseWriter, request *http.Requ
// we only have one repository
names := strings.Split(params.ByName("sources"), ",")
if names[0] != api.baseRepo.Name && names[0] != "*" {
if names[0] != api.repo.Name && names[0] != "*" {
statusResponseError(writer, http.StatusBadRequest, "repository not found: "+names[0])
return
}
cfg := sourceConfig{
Id: api.baseRepo.Id,
Name: api.baseRepo.Name,
Id: api.repo.Id,
Name: api.repo.Name,
CheckGPG: true,
CheckSSL: true,
System: true,
}
if api.baseRepo.BaseURL != "" {
cfg.URL = api.baseRepo.BaseURL
if api.repo.BaseURL != "" {
cfg.URL = api.repo.BaseURL
cfg.Type = "yum-baseurl"
} else if api.baseRepo.Metalink != "" {
cfg.URL = api.baseRepo.Metalink
} else if api.repo.Metalink != "" {
cfg.URL = api.repo.Metalink
cfg.Type = "yum-metalink"
} else if api.baseRepo.MirrorList != "" {
cfg.URL = api.baseRepo.MirrorList
} else if api.repo.MirrorList != "" {
cfg.URL = api.repo.MirrorList
cfg.Type = "yum-mirrorlist"
}