chore(repo): renamed gonf subfolder to something more traditional in go land
This commit is contained in:
parent
3b9af43738
commit
560becfd32
14 changed files with 2 additions and 2 deletions
81
pkg/packages.go
Normal file
81
pkg/packages.go
Normal file
|
@ -0,0 +1,81 @@
|
|||
package gonf
|
||||
|
||||
import "log/slog"
|
||||
|
||||
// ----- Globals ---------------------------------------------------------------
|
||||
var packages []*PackagePromise
|
||||
|
||||
// packages management functions
|
||||
var packages_install_function func([]string) (Status, []string)
|
||||
var packages_list_function func()
|
||||
var packages_update_function *CommandPromise
|
||||
|
||||
// ----- Init ------------------------------------------------------------------
|
||||
func init() {
|
||||
packages = make([]*PackagePromise, 0)
|
||||
}
|
||||
|
||||
// ----- Public ----------------------------------------------------------------
|
||||
func SetPackagesConfiguration(install func([]string) (Status, []string), list func(), update *CommandPromise) {
|
||||
packages_install_function = install
|
||||
packages_list_function = list
|
||||
packages_update_function = update
|
||||
}
|
||||
|
||||
func Package(names ...string) *PackagePromise {
|
||||
return &PackagePromise{
|
||||
chain: nil,
|
||||
err: nil,
|
||||
names: names,
|
||||
status: PROMISED,
|
||||
}
|
||||
}
|
||||
|
||||
type PackagePromise struct {
|
||||
chain []Promise
|
||||
err error
|
||||
names []string
|
||||
status Status
|
||||
}
|
||||
|
||||
func (p *PackagePromise) IfRepaired(ps ...Promise) Promise {
|
||||
p.chain = ps
|
||||
return p
|
||||
}
|
||||
|
||||
func (p *PackagePromise) Promise() Promise {
|
||||
packages = append(packages, p)
|
||||
return p
|
||||
}
|
||||
|
||||
func (p *PackagePromise) Resolve() {
|
||||
status, affected := packages_install_function(p.names)
|
||||
switch status {
|
||||
case BROKEN:
|
||||
slog.Error("package", "names", p.names, "status", status, "broke", affected)
|
||||
case KEPT:
|
||||
slog.Debug("package", "names", p.names, "status", status)
|
||||
case REPAIRED:
|
||||
slog.Info("package", "names", p.names, "status", status, "repaired", affected)
|
||||
for _, pp := range p.chain {
|
||||
pp.Resolve()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----- Internal --------------------------------------------------------------
|
||||
func resolvePackages() (status Status) {
|
||||
status = KEPT
|
||||
for _, c := range packages {
|
||||
if c.status == PROMISED {
|
||||
c.Resolve()
|
||||
switch c.status {
|
||||
case BROKEN:
|
||||
return BROKEN
|
||||
case REPAIRED:
|
||||
status = REPAIRED
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue