123456789101112131415161718192021222324252627282930313233343536373839 |
- package service
- import (
- "io"
- "github.com/docker/docker/cli/command"
- "github.com/docker/docker/cli/command/service/progress"
- "github.com/docker/docker/pkg/jsonmessage"
- "golang.org/x/net/context"
- )
- // waitOnService waits for the service to converge. It outputs a progress bar,
- // if appopriate based on the CLI flags.
- func waitOnService(ctx context.Context, dockerCli *command.DockerCli, serviceID string, opts *serviceOptions) error {
- errChan := make(chan error, 1)
- pipeReader, pipeWriter := io.Pipe()
- go func() {
- errChan <- progress.ServiceProgress(ctx, dockerCli.Client(), serviceID, pipeWriter)
- }()
- if opts.quiet {
- go func() {
- for {
- var buf [1024]byte
- if _, err := pipeReader.Read(buf[:]); err != nil {
- return
- }
- }
- }()
- return <-errChan
- }
- err := jsonmessage.DisplayJSONMessagesToStream(pipeReader, dockerCli.Out(), nil)
- if err == nil {
- err = <-errChan
- }
- return err
- }
|