1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-08-06 22:33:07 +02:00

Close a task's stdout pipe when we are done with it

This is similar to what we do when running tasks in a pty (we close the pty
there), and it should cause the called command to terminate.
This commit is contained in:
Stefan Haller
2025-07-25 07:43:59 +02:00
parent 47afa7eb95
commit d0a10bafbd

View File

@ -18,10 +18,13 @@ func (gui *Gui) newCmdTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
manager := gui.getManager(view) manager := gui.getManager(view)
var r io.ReadCloser
start := func() (*exec.Cmd, io.Reader) { start := func() (*exec.Cmd, io.Reader) {
r, err := cmd.StdoutPipe() var err error
r, err = cmd.StdoutPipe()
if err != nil { if err != nil {
gui.c.Log.Error(err) gui.c.Log.Error(err)
r = nil
} }
cmd.Stderr = cmd.Stdout cmd.Stderr = cmd.Stdout
@ -32,8 +35,15 @@ func (gui *Gui) newCmdTask(view *gocui.View, cmd *exec.Cmd, prefix string) error
return cmd, r return cmd, r
} }
onClose := func() {
if r != nil {
r.Close()
r = nil
}
}
linesToRead := gui.linesToReadFromCmdTask(view) linesToRead := gui.linesToReadFromCmdTask(view)
if err := manager.NewTask(manager.NewCmdTask(start, prefix, linesToRead, nil), cmdStr); err != nil { if err := manager.NewTask(manager.NewCmdTask(start, prefix, linesToRead, onClose), cmdStr); err != nil {
gui.c.Log.Error(err) gui.c.Log.Error(err)
} }