MCPcopy Create free account
hub / github.com/Scalingo/cli / CopyWithFirstReadChan

Function CopyWithFirstReadChan

io/copy.go:9–45  ·  view source on GitHub ↗
(firstReadDone chan struct{})

Source from the content-addressed store, hash-verified

7)
8
9func CopyWithFirstReadChan(firstReadDone chan struct{}) func(io.Writer, io.Reader) (int64, error) {
10 return func(dst io.Writer, src io.Reader) (written int64, err error) {
11 buf := make([]byte, 2*1024)
12 for {
13 nr, er := src.Read(buf)
14 select {
15 case <-firstReadDone:
16 default:
17 close(firstReadDone)
18 // HACK: let the close hook of the spinner
19 time.Sleep(100 * time.Millisecond)
20 }
21 if nr > 0 {
22 nw, ew := dst.Write(buf[0:nr])
23 if nw > 0 {
24 written += int64(nw)
25 }
26 if ew != nil {
27 err = ew
28 break
29 }
30 if nr != nw {
31 err = io.ErrShortWrite
32 break
33 }
34 }
35 if er == io.EOF {
36 break
37 }
38 if er != nil {
39 err = er
40 break
41 }
42 }
43 return written, err
44 }
45}
46
47func CopyWithTimeout(timeout time.Duration) func(io.Writer, io.Reader) (int64, error) {
48 return func(dst io.Writer, src io.Reader) (written int64, err error) {

Callers 1

RunFunction · 0.92

Calls

no outgoing calls

Tested by

no test coverage detected