mirror of
https://github.com/docker/compose.git
synced 2025-07-26 23:24:05 +02:00
Refactor calling the progress writer to make it easier
This commit is contained in:
parent
b55267739a
commit
a1bb04ebe1
@ -30,10 +30,8 @@ package compose
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"golang.org/x/sync/errgroup"
|
|
||||||
|
|
||||||
"github.com/docker/api/client"
|
"github.com/docker/api/client"
|
||||||
"github.com/docker/api/compose"
|
"github.com/docker/api/compose"
|
||||||
@ -67,22 +65,7 @@ func runUp(ctx context.Context, opts compose.ProjectOptions) error {
|
|||||||
return errors.New("compose not implemented in current context")
|
return errors.New("compose not implemented in current context")
|
||||||
}
|
}
|
||||||
|
|
||||||
eg, _ := errgroup.WithContext(ctx)
|
return progress.Run(ctx, func(ctx context.Context) error {
|
||||||
w, err := progress.NewWriter(os.Stderr)
|
return composeService.Up(ctx, opts)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
eg.Go(func() error {
|
|
||||||
return w.Start(context.Background())
|
|
||||||
})
|
})
|
||||||
|
|
||||||
ctx = progress.WithContextWriter(ctx, w)
|
|
||||||
|
|
||||||
eg.Go(func() error {
|
|
||||||
defer w.Stop()
|
|
||||||
err := composeService.Up(ctx, opts)
|
|
||||||
return err
|
|
||||||
})
|
|
||||||
|
|
||||||
return eg.Wait()
|
|
||||||
}
|
}
|
||||||
|
@ -30,10 +30,8 @@ package run
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"golang.org/x/sync/errgroup"
|
|
||||||
|
|
||||||
"github.com/docker/api/cli/options/run"
|
"github.com/docker/api/cli/options/run"
|
||||||
"github.com/docker/api/client"
|
"github.com/docker/api/client"
|
||||||
@ -71,23 +69,11 @@ func runRun(ctx context.Context, image string, opts run.Opts) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
eg, _ := errgroup.WithContext(ctx)
|
err = progress.Run(ctx, func(ctx context.Context) error {
|
||||||
w, err := progress.NewWriter(os.Stderr)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
eg.Go(func() error {
|
|
||||||
return w.Start(context.Background())
|
|
||||||
})
|
|
||||||
|
|
||||||
ctx = progress.WithContextWriter(ctx, w)
|
|
||||||
|
|
||||||
eg.Go(func() error {
|
|
||||||
defer w.Stop()
|
|
||||||
return c.ContainerService().Run(ctx, containerConfig)
|
return c.ContainerService().Run(ctx, containerConfig)
|
||||||
})
|
})
|
||||||
|
if err == nil {
|
||||||
err = eg.Wait()
|
fmt.Println(opts.Name)
|
||||||
fmt.Println(opts.Name)
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,13 @@ package progress
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containerd/console"
|
"github.com/containerd/console"
|
||||||
"github.com/moby/term"
|
"github.com/moby/term"
|
||||||
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
|
|
||||||
// EventStatus indicates the status of an action
|
// EventStatus indicates the status of an action
|
||||||
@ -59,6 +61,30 @@ func ContextWriter(ctx context.Context) Writer {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type progressFunc func(context.Context) error
|
||||||
|
|
||||||
|
// Run will run a writer and the progress function
|
||||||
|
// in parallel
|
||||||
|
func Run(ctx context.Context, pf progressFunc) error {
|
||||||
|
eg, _ := errgroup.WithContext(ctx)
|
||||||
|
w, err := NewWriter(os.Stderr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
eg.Go(func() error {
|
||||||
|
return w.Start(context.Background())
|
||||||
|
})
|
||||||
|
|
||||||
|
ctx = WithContextWriter(ctx, w)
|
||||||
|
|
||||||
|
eg.Go(func() error {
|
||||||
|
defer w.Stop()
|
||||||
|
return pf(ctx)
|
||||||
|
})
|
||||||
|
|
||||||
|
return eg.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
// NewWriter returns a new multi-progress writer
|
// NewWriter returns a new multi-progress writer
|
||||||
func NewWriter(out console.File) (Writer, error) {
|
func NewWriter(out console.File) (Writer, error) {
|
||||||
_, isTerminal := term.GetFdInfo(out)
|
_, isTerminal := term.GetFdInfo(out)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user