fix line count for files that don't end in a newline

This commit is contained in:
Iris Lightshard 2023-02-01 22:08:04 -07:00
parent 239d5b2dfa
commit 584243d358
Signed by: Iris Lightshard
GPG key ID: 3B7FBC22144E6398

View file

@ -45,15 +45,23 @@ func (d *deps) listFiles(files []git.NiceTree, data map[string]any, w http.Respo
func countLines(r io.Reader) (int, error) { func countLines(r io.Reader) (int, error) {
buf := make([]byte, 32*1024) buf := make([]byte, 32*1024)
bufLen := 0
count := 0 count := 0
nl := []byte{'\n'} nl := []byte{'\n'}
for { for {
c, err := r.Read(buf) c, err := r.Read(buf)
if c > 0 {
bufLen += c
}
count += bytes.Count(buf[:c], nl) count += bytes.Count(buf[:c], nl)
switch { switch {
case err == io.EOF: case err == io.EOF:
/* handle last line not having a newline at the end */
if bufLen >= 1 && buf[bufLen-1] != '\n' {
count++
}
return count, nil return count, nil
case err != nil: case err != nil:
return 0, err return 0, err