Skip to content

Commit

Permalink
Also forward exec output when failing to demultiplex
Browse files Browse the repository at this point in the history
  • Loading branch information
m90 committed Feb 29, 2024
1 parent 5abfe5b commit b85badb
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions cmd/backup/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,23 @@ func (s *script) exec(containerRef string, command string, user string) ([]byte,
}
defer resp.Close()

var outBuf, errBuf bytes.Buffer
var outBuf, errBuf, fullRespBuf bytes.Buffer
outputDone := make(chan error)

tee := io.TeeReader(resp.Reader, &fullRespBuf)

go func() {
_, err := stdcopy.StdCopy(&outBuf, &errBuf, resp.Reader)
_, err := stdcopy.StdCopy(&outBuf, &errBuf, tee)
outputDone <- err
}()

if err := <-outputDone; err != nil {
if body, bErr := io.ReadAll(&fullRespBuf); bErr == nil {
// if possible, try to append the exec output to the error
// as it's likely to be more relevant for users than the error from
// calling stdcopy.Copy
err = errwrap.Wrap(errors.New(string(body)), err.Error())
}
return nil, nil, errwrap.Wrap(err, "error demultiplexing output")
}

Expand Down

0 comments on commit b85badb

Please sign in to comment.