chore(promises): make a Status function part of the Promise interface
This commit is contained in:
parent
4d3e266b07
commit
eb9d5f861a
7 changed files with 27 additions and 15 deletions
|
@ -26,7 +26,7 @@ func CommandWithEnv(env []string, cmd string, args ...string) *CommandPromise {
|
||||||
cmd: cmd,
|
cmd: cmd,
|
||||||
env: env,
|
env: env,
|
||||||
err: nil,
|
err: nil,
|
||||||
Status: PROMISED,
|
status: PROMISED,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ type CommandPromise struct {
|
||||||
cmd string
|
cmd string
|
||||||
env []string
|
env []string
|
||||||
err error
|
err error
|
||||||
Status Status
|
status Status
|
||||||
Stdout bytes.Buffer
|
Stdout bytes.Buffer
|
||||||
Stderr bytes.Buffer
|
Stderr bytes.Buffer
|
||||||
}
|
}
|
||||||
|
@ -60,16 +60,16 @@ func (c *CommandPromise) Resolve() {
|
||||||
cmd.Stderr = &c.Stderr
|
cmd.Stderr = &c.Stderr
|
||||||
|
|
||||||
if c.err = cmd.Run(); c.err != nil {
|
if c.err = cmd.Run(); c.err != nil {
|
||||||
c.Status = BROKEN
|
c.status = BROKEN
|
||||||
slog.Error("command", "args", c.args, "cmd", c.cmd, "env", c.env, "err", c.err, "stdout", c.Stdout.String(), "stderr", c.Stderr.String(), "status", c.Status)
|
slog.Error("command", "args", c.args, "cmd", c.cmd, "env", c.env, "err", c.err, "stdout", c.Stdout.String(), "stderr", c.Stderr.String(), "status", c.Status)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if c.Stdout.Len() == 0 && c.Stderr.Len() > 0 {
|
if c.Stdout.Len() == 0 && c.Stderr.Len() > 0 {
|
||||||
c.Status = BROKEN
|
c.status = BROKEN
|
||||||
slog.Error("command", "args", c.args, "cmd", c.cmd, "env", c.env, "stdout", c.Stdout.String(), "stderr", c.Stderr.String(), "status", c.Status)
|
slog.Error("command", "args", c.args, "cmd", c.cmd, "env", c.env, "stdout", c.Stdout.String(), "stderr", c.Stderr.String(), "status", c.Status)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.Status = REPAIRED
|
c.status = REPAIRED
|
||||||
slog.Info("command", "args", c.args, "cmd", c.cmd, "env", c.env, "stderr", c.Stderr.String(), "status", c.Status)
|
slog.Info("command", "args", c.args, "cmd", c.cmd, "env", c.env, "stderr", c.Stderr.String(), "status", c.Status)
|
||||||
// TODO add a notion of repaired?
|
// TODO add a notion of repaired?
|
||||||
for _, p := range c.chain {
|
for _, p := range c.chain {
|
||||||
|
@ -77,13 +77,17 @@ func (c *CommandPromise) Resolve() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c CommandPromise) Status() Status {
|
||||||
|
return c.status
|
||||||
|
}
|
||||||
|
|
||||||
// ----- Internal --------------------------------------------------------------
|
// ----- Internal --------------------------------------------------------------
|
||||||
func resolveCommands() (status Status) {
|
func resolveCommands() (status Status) {
|
||||||
status = KEPT
|
status = KEPT
|
||||||
for _, c := range commands {
|
for _, c := range commands {
|
||||||
if c.Status == PROMISED {
|
if c.status == PROMISED {
|
||||||
c.Resolve()
|
c.Resolve()
|
||||||
switch c.Status {
|
switch c.status {
|
||||||
case BROKEN:
|
case BROKEN:
|
||||||
return BROKEN
|
return BROKEN
|
||||||
case REPAIRED:
|
case REPAIRED:
|
||||||
|
|
|
@ -6,16 +6,11 @@ func init() {
|
||||||
customPromises = make([]*CustomPromise, 0)
|
customPromises = make([]*CustomPromise, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
type CustomPromiseInterface interface {
|
|
||||||
Promise
|
|
||||||
Status() Status
|
|
||||||
}
|
|
||||||
|
|
||||||
type CustomPromise struct {
|
type CustomPromise struct {
|
||||||
promise CustomPromiseInterface
|
promise Promise
|
||||||
}
|
}
|
||||||
|
|
||||||
func MakeCustomPromise(p CustomPromiseInterface) *CustomPromise {
|
func MakeCustomPromise(p Promise) *CustomPromise {
|
||||||
return &CustomPromise{
|
return &CustomPromise{
|
||||||
promise: p,
|
promise: p,
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,6 +123,10 @@ func (f *FilePromise) Resolve() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f FilePromise) Status() Status {
|
||||||
|
return f.status
|
||||||
|
}
|
||||||
|
|
||||||
// ----- Internal --------------------------------------------------------------
|
// ----- Internal --------------------------------------------------------------
|
||||||
func resolveFiles() (status Status) {
|
func resolveFiles() (status Status) {
|
||||||
status = KEPT
|
status = KEPT
|
||||||
|
|
|
@ -63,6 +63,10 @@ func (p *PackagePromise) Resolve() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p PackagePromise) Status() Status {
|
||||||
|
return p.status
|
||||||
|
}
|
||||||
|
|
||||||
// ----- Internal --------------------------------------------------------------
|
// ----- Internal --------------------------------------------------------------
|
||||||
func resolvePackages() (status Status) {
|
func resolvePackages() (status Status) {
|
||||||
status = KEPT
|
status = KEPT
|
||||||
|
|
|
@ -4,6 +4,7 @@ type Promise interface {
|
||||||
IfRepaired(...Promise) Promise
|
IfRepaired(...Promise) Promise
|
||||||
Promise() Promise
|
Promise() Promise
|
||||||
Resolve()
|
Resolve()
|
||||||
|
Status() Status
|
||||||
}
|
}
|
||||||
|
|
||||||
//type Operation int
|
//type Operation int
|
||||||
|
|
|
@ -78,6 +78,10 @@ func (s *ServicePromise) Resolve() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s ServicePromise) Status() Status {
|
||||||
|
return s.status
|
||||||
|
}
|
||||||
|
|
||||||
// ----- Internal --------------------------------------------------------------
|
// ----- Internal --------------------------------------------------------------
|
||||||
func resolveServices() (status Status) {
|
func resolveServices() (status Status) {
|
||||||
status = KEPT
|
status = KEPT
|
||||||
|
|
|
@ -58,7 +58,7 @@ func packages_install(names []string) (gonf.Status, []string) {
|
||||||
cmd := gonf.CommandWithEnv([]string{"DEBIAN_FRONTEND=noninteractive", "LC_ALL=C"}, "apt-get", args...)
|
cmd := gonf.CommandWithEnv([]string{"DEBIAN_FRONTEND=noninteractive", "LC_ALL=C"}, "apt-get", args...)
|
||||||
cmd.Resolve()
|
cmd.Resolve()
|
||||||
packages_list()
|
packages_list()
|
||||||
return cmd.Status, names
|
return cmd.Status(), names
|
||||||
}
|
}
|
||||||
|
|
||||||
func packages_list() {
|
func packages_list() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue