2018-04-15 14:35:29 -03:00
|
|
|
package output
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"io"
|
2024-03-10 17:11:07 +00:00
|
|
|
|
|
|
|
|
"github.com/go-task/task/v3/internal/templater"
|
2018-04-15 14:35:29 -03:00
|
|
|
)
|
|
|
|
|
|
2022-07-06 10:43:32 -03:00
|
|
|
type Group struct {
|
2022-01-14 00:11:47 +00:00
|
|
|
Begin, End string
|
2023-03-09 02:34:52 +01:00
|
|
|
ErrorOnly bool
|
2022-01-14 00:11:47 +00:00
|
|
|
}
|
2018-04-15 14:35:29 -03:00
|
|
|
|
2024-03-10 17:11:07 +00:00
|
|
|
func (g Group) WrapWriter(stdOut, _ io.Writer, _ string, cache *templater.Cache) (io.Writer, io.Writer, CloseFunc) {
|
2022-07-06 10:43:32 -03:00
|
|
|
gw := &groupWriter{writer: stdOut}
|
2022-01-14 00:11:47 +00:00
|
|
|
if g.Begin != "" {
|
2024-03-10 17:11:07 +00:00
|
|
|
gw.begin = templater.Replace(g.Begin, cache) + "\n"
|
2022-01-14 00:11:47 +00:00
|
|
|
}
|
|
|
|
|
if g.End != "" {
|
2024-03-10 17:11:07 +00:00
|
|
|
gw.end = templater.Replace(g.End, cache) + "\n"
|
2022-01-14 00:11:47 +00:00
|
|
|
}
|
2023-03-09 02:34:52 +01:00
|
|
|
return gw, gw, func(err error) error {
|
|
|
|
|
if g.ErrorOnly && err == nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
return gw.close()
|
|
|
|
|
}
|
2018-04-15 14:35:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type groupWriter struct {
|
2022-07-06 10:43:32 -03:00
|
|
|
writer io.Writer
|
|
|
|
|
buff bytes.Buffer
|
2022-01-14 00:11:47 +00:00
|
|
|
begin, end string
|
2018-04-15 14:35:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (gw *groupWriter) Write(p []byte) (int, error) {
|
|
|
|
|
return gw.buff.Write(p)
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-06 10:43:32 -03:00
|
|
|
func (gw *groupWriter) close() error {
|
2025-11-11 14:37:16 -03:00
|
|
|
switch {
|
|
|
|
|
case gw.buff.Len() == 0:
|
2022-01-14 00:11:47 +00:00
|
|
|
return nil
|
2025-11-11 14:37:16 -03:00
|
|
|
case gw.begin == "" && gw.end == "":
|
|
|
|
|
_, err := io.Copy(gw.writer, &gw.buff)
|
|
|
|
|
return err
|
|
|
|
|
default:
|
|
|
|
|
_, err := io.Copy(gw.writer, gw.combinedBuff())
|
|
|
|
|
return err
|
2022-01-14 00:11:47 +00:00
|
|
|
}
|
2025-11-11 14:37:16 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (gw *groupWriter) combinedBuff() io.Reader {
|
|
|
|
|
var b bytes.Buffer
|
|
|
|
|
_, _ = b.WriteString(gw.begin)
|
|
|
|
|
_, _ = io.Copy(&b, &gw.buff)
|
|
|
|
|
_, _ = b.WriteString(gw.end)
|
|
|
|
|
return &b
|
2018-04-15 14:35:29 -03:00
|
|
|
}
|