func divertStdoutToString()

in cli/commands/utils.go [44:69]


func divertStdoutToString(fn func() error) (string, error) {
	previous := os.Stdout
	defer func() {
		os.Stdout = previous
	}()

	r, w, _ := os.Pipe()
	os.Stdout = w

	err := fn()
	if err != nil {
		return "", err
	}

	errc := make(chan error)
	var buf bytes.Buffer

	go func() {
		_, err := io.Copy(&buf, r)
		errc <- err
	}()
	w.Close()
	err = <-errc
	output := strings.TrimSpace(buf.String())
	return output, err
}