github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/cmd/syft/internal/ui/log_writer.go (about)

     1  package ui
     2  
     3  import (
     4  	"bufio"
     5  	"bytes"
     6  	"io"
     7  	"strings"
     8  
     9  	"github.com/lineaje-labs/syft/internal/log"
    10  )
    11  
    12  func newLogWriter() io.Writer {
    13  	l := logWriter{}
    14  	l.r = bufio.NewReader(&l.buf)
    15  	return &l
    16  }
    17  
    18  type logWriter struct {
    19  	buf bytes.Buffer
    20  	r   *bufio.Reader
    21  }
    22  
    23  func (l *logWriter) Write(data []byte) (n int, err error) {
    24  	l.buf.Write(data)
    25  	s, err := l.r.ReadString('\n')
    26  	s = strings.TrimRight(s, "\n")
    27  	for s != "" {
    28  		log.Trace("[unexpected stdout] " + s)
    29  		n += len(s)
    30  		if err != nil {
    31  			break
    32  		}
    33  		s, err = l.r.ReadString('\n')
    34  		s = strings.TrimRight(s, "\n")
    35  	}
    36  	return n, err
    37  }