55 lines
791 B
Go
55 lines
791 B
Go
package distro
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
var mu sync.Mutex
|
|
var distros []distribution
|
|
|
|
type distribution interface {
|
|
Distro() Distro
|
|
Equal(Distro) bool
|
|
Packages() (packages []string, err error)
|
|
}
|
|
|
|
func Register(d distribution) {
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
|
|
distros = append(distros, d)
|
|
}
|
|
|
|
func List() (dds []Distro) {
|
|
for _, dd := range distros {
|
|
dds = append(dds, dd.Distro())
|
|
}
|
|
return
|
|
}
|
|
|
|
type Distro struct {
|
|
ID ID
|
|
Release string
|
|
}
|
|
|
|
func (d Distro) Packages() (packages []string, err error) {
|
|
for _, dd := range distros {
|
|
if d.ID != None && d.ID != dd.Distro().ID {
|
|
continue
|
|
}
|
|
|
|
if d.Release != "" && !dd.Equal(d) {
|
|
continue
|
|
}
|
|
|
|
var pkgs []string
|
|
pkgs, err = dd.Packages()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
packages = append(packages, pkgs...)
|
|
}
|
|
return
|
|
}
|