MCPcopy Create free account
hub / github.com/docker/buildx / open

Method open

util/sourcemeta/resolver.go:160–214  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

158}
159
160func (r *Resolver) open(ctx context.Context) (gatewayResolver, error) {
161 r.startOnce.Do(func() {
162 r.started.Store(true)
163 buildCtx, cancel := context.WithCancelCause(context.Background())
164 r.cancel = cancel
165
166 go func() {
167 r.doneErr = r.run(buildCtx, r.ready)
168 close(r.done)
169 }()
170 })
171
172 for {
173 r.mu.Lock()
174 if r.metaResolver != nil {
175 mr := r.metaResolver
176 r.mu.Unlock()
177 return mr, nil
178 }
179 if r.openErr != nil {
180 err := r.openErr
181 r.mu.Unlock()
182 return nil, err
183 }
184 r.mu.Unlock()
185
186 select {
187 case mr := <-r.ready:
188 r.mu.Lock()
189 if r.metaResolver == nil {
190 r.metaResolver = mr
191 r.openOnce.Do(func() {
192 close(r.opened)
193 })
194 }
195 r.mu.Unlock()
196 case <-r.done:
197 r.mu.Lock()
198 if r.metaResolver == nil && r.openErr == nil {
199 err := r.doneErr
200 if err == nil {
201 err = errors.New("gateway build finished without a source metadata resolver")
202 }
203 r.openErr = err
204 r.openOnce.Do(func() {
205 close(r.opened)
206 })
207 }
208 r.mu.Unlock()
209 case <-r.opened:
210 case <-ctx.Done():
211 return nil, context.Cause(ctx)
212 }
213 }
214}

Callers 2

ResolveSourceMetadataMethod · 0.95
ResolveStateMethod · 0.95

Calls 4

DoneMethod · 0.80
NewMethod · 0.65
DoMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected