67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
package fs
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/influxdata/influxdb/v2/pkg/errors"
|
|
)
|
|
|
|
// A FileExistsError is returned when an operation cannot be completed due to a
|
|
// file already existing.
|
|
type FileExistsError struct {
|
|
path string
|
|
}
|
|
|
|
func newFileExistsError(path string) FileExistsError {
|
|
return FileExistsError{path: path}
|
|
}
|
|
|
|
func (e FileExistsError) Error() string {
|
|
return fmt.Sprintf("operation not allowed, file %q exists", e.path)
|
|
}
|
|
|
|
// DiskStatus is returned by DiskUsage
|
|
type DiskStatus struct {
|
|
All uint64
|
|
Used uint64
|
|
Free uint64
|
|
Avail uint64
|
|
}
|
|
|
|
func copyFile(src, dst string) (err error) {
|
|
in, err := os.Open(src)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
out, err := os.Create(dst)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer errors.Capture(&err, out.Close)()
|
|
|
|
defer errors.Capture(&err, in.Close)()
|
|
|
|
if _, err = io.Copy(out, in); err != nil {
|
|
return err
|
|
}
|
|
|
|
return out.Sync()
|
|
}
|
|
|
|
// MoveFileWithReplacement copies the file contents at `src` to `dst`.
|
|
// and deletes `src` on success.
|
|
//
|
|
// If the file at `dst` already exists, it will be truncated and its contents
|
|
// overwritten.
|
|
func MoveFileWithReplacement(src, dst string) error {
|
|
if err := copyFile(src, dst); err != nil {
|
|
return fmt.Errorf("copy: %w", err)
|
|
}
|
|
|
|
return os.Remove(src)
|
|
}
|