From 9a5a01dfbd43b29749d9b5f7f0aa0f6998b657fa Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 8 Jun 2019 22:08:56 +1000 Subject: [PATCH] fix up rebuild container logic --- pkg/gui/containers_panel.go | 2 ++ pkg/gui/services_panel.go | 47 ++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 793bc02b..2ab25964 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -207,7 +207,9 @@ func (gui *Gui) renderLogs(container *commands.Container, template string, setup default: result, err := gui.DockerCommand.Client.ContainerInspect(context.Background(), container.ID) if err != nil { + // if we get an error, then the container has probably been removed so we'll get out of here gui.Log.Error(err) + notifyStopped <- struct{}{} return } if result.State.Running { diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go index 2f4459a5..155e22d0 100644 --- a/pkg/gui/services_panel.go +++ b/pkg/gui/services_panel.go @@ -1,10 +1,8 @@ package gui import ( - "bytes" "encoding/json" "fmt" - "io" "github.com/fatih/color" "github.com/go-errors/errors" @@ -187,6 +185,7 @@ func (gui *Gui) handleServicesNextContext(g *gocui.Gui, v *gocui.View) error { type commandOption struct { description string command string + f func() error } // GetDisplayStrings is a function. @@ -293,50 +292,50 @@ func (gui *Gui) handleServiceRestartMenu(g *gocui.Gui, v *gocui.View) error { return nil } + rebuildCommand := utils.ApplyTemplate(gui.Config.UserConfig.CommandTemplates.RebuildService, service) + options := []*commandOption{ { description: gui.Tr.Restart, command: utils.ApplyTemplate(gui.Config.UserConfig.CommandTemplates.RestartService, service), + f: func() error { + return gui.WithWaitingStatus(gui.Tr.RestartingStatus, func() error { + if err := service.Restart(); err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + return gui.refreshContainersAndServices() + }) + }, }, { description: gui.Tr.Rebuild, command: utils.ApplyTemplate(gui.Config.UserConfig.CommandTemplates.RebuildService, service), + f: func() error { + gui.SubProcess = gui.OSCommand.RunCustomCommand(rebuildCommand) + return gui.Errors.ErrSubProcess + }, }, { description: gui.Tr.Cancel, + f: func() error { return nil }, }, } - return gui.createCommandMenu(options, gui.Tr.RestartingStatus) + handleMenuPress := func(index int) error { return options[index].f() } + + return gui.createMenu("", options, len(options), handleMenuPress) } func (gui *Gui) createCommandMenu(options []*commandOption, status string) error { - handleMenuPress := func(index int) error { if options[index].command == "" { return nil } - gui.getMainView().Clear() return gui.WithWaitingStatus(status, func() error { - done := make(chan struct{}) - go gui.T.NewTask(func(stop chan struct{}) { - cmd := gui.OSCommand.RunCustomCommand(options[index].command) - - cmd.Stdout = gui.getMainView() - var stderrBuf bytes.Buffer - cmd.Stderr = io.MultiWriter(gui.getMainView(), &stderrBuf) - - cmd.Run() - - close(done) - - errorMessage := stderrBuf.String() - if errorMessage != "" { - gui.createErrorPanel(gui.g, errorMessage) - } - }) - - <-done + if err := gui.OSCommand.RunCommand(options[index].command); err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } return nil })