From 2d3e79cf5ec0e7180431b01ab0a0a59d2d8e337f Mon Sep 17 00:00:00 2001 From: Frederik Ring Date: Fri, 1 Mar 2024 09:18:39 +0100 Subject: [PATCH] Also forward exec output when failing to demultiplex (#379) --- cmd/backup/exec.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cmd/backup/exec.go b/cmd/backup/exec.go index 1d762f6..350803c 100644 --- a/cmd/backup/exec.go +++ b/cmd/backup/exec.go @@ -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") }