// Copyright 2022 - Offen Authors // SPDX-License-Identifier: MPL-2.0 package main import ( "bytes" "fmt" "io" "os" ) var noop = func() error { return nil } // remove removes the given file or directory from disk. func remove(location string) error { fi, err := os.Lstat(location) if err != nil { if os.IsNotExist(err) { return nil } return fmt.Errorf("remove: error checking for existence of `%s`: %w", location, err) } if fi.IsDir() { err = os.RemoveAll(location) } else { err = os.Remove(location) } if err != nil { return fmt.Errorf("remove: error removing `%s`: %w", location, err) } return nil } // buffer takes an io.Writer and returns a wrapped version of the // writer that writes to both the original target as well as the returned buffer func buffer(w io.Writer) (io.Writer, *bytes.Buffer) { buffering := &bufferingWriter{buf: bytes.Buffer{}, writer: w} return buffering, &buffering.buf } type bufferingWriter struct { buf bytes.Buffer writer io.Writer } func (b *bufferingWriter) Write(p []byte) (n int, err error) { if n, err := b.buf.Write(p); err != nil { return n, fmt.Errorf("(*bufferingWriter).Write: error writing to buffer: %w", err) } return b.writer.Write(p) }