MCPcopy Create free account
hub / github.com/diskfs/go-diskfs / copyOneFile

Function copyOneFile

sync/copy.go:95–161  ·  view source on GitHub ↗
(src fs.FS, dst filesystem.FileSystem, p string, info fs.FileInfo)

Source from the content-addressed store, hash-verified

93}
94
95func copyOneFile(src fs.FS, dst filesystem.FileSystem, p string, info fs.FileInfo) error {
96 in, err := src.Open(p)
97 if err != nil {
98 return err
99 }
100 defer func() { _ = in.Close() }()
101
102 out, err := dst.OpenFile(p, os.O_CREATE|os.O_TRUNC|os.O_RDWR)
103 if err != nil {
104 return err
105 }
106 defer func() { _ = out.Close() }()
107
108 if info.Size() <= maxCopyAllSize {
109 data, err := io.ReadAll(in)
110 if err != nil {
111 return err
112 }
113 n, err := out.Write(data)
114 if err != nil {
115 return err
116 }
117 if n != len(data) {
118 return io.ErrShortWrite
119 }
120 } else {
121 buf := make([]byte, 32*1024)
122 for {
123 n, rerr := in.Read(buf)
124 if n > 0 {
125 written := 0
126 for written < n {
127 w, werr := out.Write(buf[written:n])
128 if werr != nil {
129 return werr
130 }
131 if w == 0 {
132 return io.ErrShortWrite
133 }
134 written += w
135 }
136 }
137 if rerr == io.EOF {
138 break
139 }
140 if rerr != nil {
141 return rerr
142 }
143 }
144 }
145
146 // Restore timestamps *after* data is written (tar semantics)
147 atime := getAccessTime(info)
148 if atime.IsZero() {
149 atime = info.ModTime() // fallback
150 }
151 if err := dst.Chtimes(
152 p,

Callers 1

copyDirFunction · 0.85

Calls 9

getAccessTimeFunction · 0.70
OpenMethod · 0.65
CloseMethod · 0.65
OpenFileMethod · 0.65
SizeMethod · 0.65
WriteMethod · 0.65
ChtimesMethod · 0.65
ReadMethod · 0.45
ModTimeMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…