MCPcopy Create free account
hub / github.com/gokcehan/lf / copyFile

Function copyFile

copy.go:57–99  ·  view source on GitHub ↗
(src, dst string, preserve []string, info os.FileInfo, nums chan<- int64, errs chan<- error)

Source from the content-addressed store, hash-verified

55}
56
57func copyFile(src, dst string, preserve []string, info os.FileInfo, nums chan<- int64, errs chan<- error) {
58 r, err := os.Open(src)
59 if err != nil {
60 errs <- err
61 return
62 }
63 defer r.Close()
64
65 var dstMode os.FileMode = 0o666
66 if slices.Contains(preserve, "mode") {
67 dstMode = info.Mode()
68 }
69 w, err := os.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, dstMode)
70 if err != nil {
71 errs <- err
72 return
73 }
74
75 if _, err := io.Copy(NewProgressWriter(w, nums), r); err != nil {
76 errs <- err
77 w.Close()
78 if err = os.Remove(dst); err != nil {
79 errs <- err
80 }
81 return
82 }
83
84 if err := w.Close(); err != nil {
85 errs <- err
86 if err = os.Remove(dst); err != nil {
87 errs <- err
88 }
89 return
90 }
91
92 if slices.Contains(preserve, "timestamps") {
93 atime := times.Get(info).AccessTime()
94 mtime := info.ModTime()
95 if err := os.Chtimes(dst, atime, mtime); err != nil {
96 errs <- err
97 }
98 }
99}
100
101func copyAll(srcs []string, dstDir string, preserve []string) (nums chan int64, errs chan error) {
102 nums = make(chan int64, 1024)

Callers 1

copyAllFunction · 0.85

Calls 3

NewProgressWriterFunction · 0.85
ModeMethod · 0.45
ModTimeMethod · 0.45

Tested by

no test coverage detected