opengist/internal/git/output_parser.go

39 lines
755 B
Go

package git
import (
"bytes"
"io"
)
func truncateCommandOutput(out io.Reader, maxBytes int64) (string, bool, error) {
var (
buf []byte
err error
)
if maxBytes < 0 {
// read entire output
buf, err = io.ReadAll(out)
if err != nil {
return "", false, err
}
return string(buf), false, nil
}
// read up to maxBytes bytes
buf = make([]byte, maxBytes)
n, err := io.ReadFull(out, buf)
if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF {
return "", false, err
}
bytesRead := int64(n)
// find index of last newline character
lastNewline := bytes.LastIndexByte(buf, '\n')
if lastNewline >= 0 {
// truncate buffer to exclude last line
buf = buf[:lastNewline]
}
return string(buf), bytesRead == maxBytes, nil
}