mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 09:17:49 +08:00
Merge pull request #281 from tonistiigi/load-fix
build: improve error checking on load
This commit is contained in:
commit
fd6de6b6ae
@ -817,20 +817,27 @@ func newDockerLoader(ctx context.Context, d DockerAPI, name string, mw *progress
|
|||||||
}
|
}
|
||||||
|
|
||||||
pr, pw := io.Pipe()
|
pr, pw := io.Pipe()
|
||||||
started := make(chan struct{})
|
done := make(chan struct{})
|
||||||
w := &waitingWriter{
|
|
||||||
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
var w *waitingWriter
|
||||||
|
w = &waitingWriter{
|
||||||
PipeWriter: pw,
|
PipeWriter: pw,
|
||||||
f: func() {
|
f: func() {
|
||||||
resp, err := c.ImageLoad(ctx, pr, false)
|
resp, err := c.ImageLoad(ctx, pr, false)
|
||||||
|
defer close(done)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
pr.CloseWithError(err)
|
pr.CloseWithError(err)
|
||||||
|
w.mu.Lock()
|
||||||
|
w.err = err
|
||||||
|
w.mu.Unlock()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
prog := mw.WithPrefix("", false)
|
prog := mw.WithPrefix("", false)
|
||||||
close(started)
|
|
||||||
progress.FromReader(prog, "importing to docker", resp.Body)
|
progress.FromReader(prog, "importing to docker", resp.Body)
|
||||||
},
|
},
|
||||||
started: started,
|
done: done,
|
||||||
|
cancel: cancel,
|
||||||
}
|
}
|
||||||
return w, func() {
|
return w, func() {
|
||||||
pr.Close()
|
pr.Close()
|
||||||
@ -839,11 +846,12 @@ func newDockerLoader(ctx context.Context, d DockerAPI, name string, mw *progress
|
|||||||
|
|
||||||
type waitingWriter struct {
|
type waitingWriter struct {
|
||||||
*io.PipeWriter
|
*io.PipeWriter
|
||||||
f func()
|
f func()
|
||||||
once sync.Once
|
once sync.Once
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
err error
|
err error
|
||||||
started chan struct{}
|
done chan struct{}
|
||||||
|
cancel func()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *waitingWriter) Write(dt []byte) (int, error) {
|
func (w *waitingWriter) Write(dt []byte) (int, error) {
|
||||||
@ -855,6 +863,11 @@ func (w *waitingWriter) Write(dt []byte) (int, error) {
|
|||||||
|
|
||||||
func (w *waitingWriter) Close() error {
|
func (w *waitingWriter) Close() error {
|
||||||
err := w.PipeWriter.Close()
|
err := w.PipeWriter.Close()
|
||||||
<-w.started
|
<-w.done
|
||||||
|
if err == nil {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
|
return w.err
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user