podman

Форк
0
/
prefixed_writer.go 
55 строк · 1.1 Кб
1
// untested sections: 1
2

3
package gexec
4

5
import (
6
	"io"
7
	"sync"
8
)
9

10
/*
11
PrefixedWriter wraps an io.Writer, emitting the passed in prefix at the beginning of each new line.
12
This can be useful when running multiple gexec.Sessions concurrently - you can prefix the log output of each
13
session by passing in a PrefixedWriter:
14

15
gexec.Start(cmd, NewPrefixedWriter("[my-cmd] ", GinkgoWriter), NewPrefixedWriter("[my-cmd] ", GinkgoWriter))
16
*/
17
type PrefixedWriter struct {
18
	prefix        []byte
19
	writer        io.Writer
20
	lock          *sync.Mutex
21
	atStartOfLine bool
22
}
23

24
func NewPrefixedWriter(prefix string, writer io.Writer) *PrefixedWriter {
25
	return &PrefixedWriter{
26
		prefix:        []byte(prefix),
27
		writer:        writer,
28
		lock:          &sync.Mutex{},
29
		atStartOfLine: true,
30
	}
31
}
32

33
func (w *PrefixedWriter) Write(b []byte) (int, error) {
34
	w.lock.Lock()
35
	defer w.lock.Unlock()
36

37
	toWrite := []byte{}
38

39
	for _, c := range b {
40
		if w.atStartOfLine {
41
			toWrite = append(toWrite, w.prefix...)
42
		}
43

44
		toWrite = append(toWrite, c)
45

46
		w.atStartOfLine = c == '\n'
47
	}
48

49
	_, err := w.writer.Write(toWrite)
50
	if err != nil {
51
		return 0, err
52
	}
53

54
	return len(b), nil
55
}
56

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.