From 924bf85a9ec6e6f2ac1c11621ecc3ac1bcf33a24 Mon Sep 17 00:00:00 2001 From: Aaron Guise Date: Mon, 2 Sep 2024 16:25:27 +1200 Subject: [PATCH] =?UTF-8?q?feat:=20Added=20utility=20for=20moving=20files?= =?UTF-8?q?=20=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/util/files.go | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 internal/util/files.go diff --git a/internal/util/files.go b/internal/util/files.go new file mode 100644 index 0000000..3fa069a --- /dev/null +++ b/internal/util/files.go @@ -0,0 +1,47 @@ +package util + +import ( + "fmt" + "io" + "os" +) + +func MoveFile(src, dst string) error { + in, err := os.Open(src) + if err != nil { + return fmt.Errorf("couldn't open source file: %s", err) + } + + out, err := os.Create(dst) + if err != nil { + in.Close() + return fmt.Errorf("couldn't open dest file: %s", err) + } + defer out.Close() + + _, err = io.Copy(out, in) + in.Close() + if err != nil { + return fmt.Errorf("writing to output file failed: %s", err) + } + + err = out.Sync() + if err != nil { + return fmt.Errorf("sync error: %s", err) + } + + si, err := os.Stat(src) + if err != nil { + return fmt.Errorf("stat error: %s", err) + } + err = os.Chmod(dst, si.Mode()) + if err != nil { + return fmt.Errorf("chmod error: %s", err) + } + + err = os.Remove(src) + if err != nil { + return fmt.Errorf("failed removing original file: %s", err) + } + return nil +}