mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-01-04 22:58:43 +00:00
c28f7cb29f
Initial part of #435
37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
package diff
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
)
|
|
|
|
// readLine is a helper that mimics the functionality of calling bufio.Scanner.Scan() and
|
|
// bufio.Scanner.Bytes(), but without the token size limitation. It will read and return
|
|
// the next line in the Reader with the trailing newline stripped. It will return an
|
|
// io.EOF error when there is nothing left to read (at the start of the function call). It
|
|
// will return any other errors it receives from the underlying call to ReadBytes.
|
|
func readLine(r *bufio.Reader) ([]byte, error) {
|
|
line_, err := r.ReadBytes('\n')
|
|
if err == io.EOF {
|
|
if len(line_) == 0 {
|
|
return nil, io.EOF
|
|
}
|
|
|
|
// ReadBytes returned io.EOF, because it didn't find another newline, but there is
|
|
// still the remainder of the file to return as a line.
|
|
line := line_
|
|
return line, nil
|
|
} else if err != nil {
|
|
return nil, err
|
|
}
|
|
line := line_[0 : len(line_)-1]
|
|
return dropCR(line), nil
|
|
}
|
|
|
|
// dropCR drops a terminal \r from the data.
|
|
func dropCR(data []byte) []byte {
|
|
if len(data) > 0 && data[len(data)-1] == '\r' {
|
|
return data[0 : len(data)-1]
|
|
}
|
|
return data
|
|
}
|