set mtime of output based on input content
1 file changed, 59 insertions(+), 0 deletions(-)
changed files
A internal/multifile/multifile.go
@@ -0,0 +1,59 @@ +package multifile + +import ( + "io" + "os" + "time" + + "gitlab.com/tozd/go/errors" +) + +type MultiFile struct { + files []FileLike + io.Writer +} + +type FileLike interface { + io.WriteCloser + Name() string +} + +func NewMultiFile(files ...FileLike) *MultiFile { + writers := make([]io.Writer, len(files)) + for i, w := range files { + writers[i] = w + } + + return &MultiFile{ + files: files, + Writer: io.MultiWriter(writers...), + } +} + +func (mf *MultiFile) Close() error { + var lastErr error + for _, w := range mf.files { + err := w.Close() + if err != nil { + lastErr = err + } + } + + return lastErr +} + +func (mf *MultiFile) Name() string { + return mf.files[0].Name() +} + +func (mf *MultiFile) Chtimes(mtime time.Time) error { + var lastErr error + for _, f := range mf.files { + err := os.Chtimes(f.Name(), mtime, mtime) + if err != nil { + lastErr = errors.Join(lastErr, err) + } + } + + return lastErr +}