executors/docker/internal/exec/omit_writer.go (90 lines of code) (raw):

package exec import ( "errors" "fmt" "io" "net" "strings" "time" ) type omitWriter struct { buf []byte start int end int n int64 } func newOmitWriter() *omitWriter { return &omitWriter{ buf: make([]byte, 32*1024), } } func (r *omitWriter) Write(p []byte) (n int, err error) { r.n += int64(len(p)) for _, b := range p { r.buf[r.end] = b r.end = (r.end + 1) % cap(r.buf) if r.end == r.start { r.start = (r.start + 1) % cap(r.buf) } } return n, nil } func (r *omitWriter) bytes() []byte { if r.start == r.end { return nil } if r.end < r.start { part1 := r.buf[r.start:] part2 := r.buf[:r.end] return append(part1, part2...) } return r.buf[r.start:r.end] } func (r *omitWriter) Error() error { length := int64(r.end - r.start) if r.end < r.start { length = int64(cap(r.buf) - (r.start - r.end)) } if r.n > length { return fmt.Errorf("omitted %d... %s", r.n-length, string(r.bytes())) } return fmt.Errorf("%s", string(r.bytes())) } type rwConn struct { io.WriteCloser io.ReadCloser } func (conn *rwConn) CloseWrite() error { return silenceAlreadyClosed(conn.WriteCloser.Close()) } func (conn *rwConn) CloseRead() error { return silenceAlreadyClosed(conn.ReadCloser.Close()) } func (conn *rwConn) Close() error { defer conn.WriteCloser.Close() if err := silenceAlreadyClosed(conn.ReadCloser.Close()); err != nil { return err } return silenceAlreadyClosed(conn.WriteCloser.Close()) } func silenceAlreadyClosed(err error) error { if err == nil { return nil } if errors.Is(err, net.ErrClosed) { return nil } const winRMClosedErr = "Command has already been closed" if strings.Contains(err.Error(), winRMClosedErr) { return nil } return err } func (*rwConn) LocalAddr() net.Addr { return addr{} } func (*rwConn) RemoteAddr() net.Addr { return addr{} } func (*rwConn) SetDeadline(t time.Time) error { return fmt.Errorf("unsupported") } func (*rwConn) SetReadDeadline(t time.Time) error { return fmt.Errorf("unsupported") } func (*rwConn) SetWriteDeadline(t time.Time) error { return fmt.Errorf("unsupported") } type addr struct{} func (addr) Network() string { return "gocat.Conn" } func (addr) String() string { return "gocat.Conn" }