in storage/benchfmt/benchfmt.go [229:275]
func (r *Reader) Next() bool {
if r.err != nil {
return false
}
copied := false
havePerm := r.permLabels != nil
for r.s.Scan() {
r.lineNum++
line := r.s.Text()
if key, value, ok := parseKeyValueLine(line); ok {
if _, ok := r.permLabels[key]; ok {
continue
}
if !copied {
copied = true
r.labels = r.labels.Copy()
}
// TODO(quentin): Spec says empty value is valid, but
// we need a way to cancel previous labels, so we'll
// treat an empty value as a removal.
if value == "" {
delete(r.labels, key)
} else {
r.labels[key] = value
}
continue
}
// Blank line delimits the header. If we find anything else, the file must not have a header.
if !havePerm {
if line == "" {
r.permLabels = r.labels.Copy()
} else {
r.permLabels = Labels{}
}
}
if fullName, ok := parseBenchmarkLine(line); ok {
r.result = r.newResult(r.labels, r.lineNum, fullName, line)
return true
}
}
if err := r.s.Err(); err != nil {
r.err = err
return false
}
r.err = io.EOF
return false
}