diff --git a/internal/pkg/exec.go b/internal/pkg/exec.go index 5c1b399..bc068d1 100644 --- a/internal/pkg/exec.go +++ b/internal/pkg/exec.go @@ -361,6 +361,7 @@ const ( // scanVerbose prefixes program output for a verbose [message.Msg]. func scanVerbose( msg message.Msg, + cancel context.CancelFunc, done chan<- struct{}, prefix string, r io.Reader, @@ -375,6 +376,7 @@ func scanVerbose( msg.Verbose(prefix, s.Text()) } if err := s.Err(); err != nil && !errors.Is(err, os.ErrClosed) { + cancel() msg.Verbose("*"+prefix, err) } } @@ -433,8 +435,8 @@ func (a *execArtifact) cure(f *FContext, hostNet bool) (err error) { }() stdoutDone, stderrDone := make(chan struct{}), make(chan struct{}) - go scanVerbose(msg, stdoutDone, "("+a.name+":1)", stdout) - go scanVerbose(msg, stderrDone, "("+a.name+":2)", stderr) + go scanVerbose(msg, cancel, stdoutDone, "("+a.name+":1)", stdout) + go scanVerbose(msg, cancel, stderrDone, "("+a.name+":2)", stderr) defer func() { <-stdoutDone; <-stderrDone }() }