mirror of
https://github.com/docker/compose.git
synced 2026-08-31 23:03:55 +00:00
Refactor calling the progress writer to make it easier
This commit is contained in:
parent
b55267739a
commit
a1bb04ebe1
3 changed files with 32 additions and 37 deletions
|
|
@ -2,11 +2,13 @@ package progress
|
|||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/containerd/console"
|
||||
"github.com/moby/term"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
// EventStatus indicates the status of an action
|
||||
|
|
@ -59,6 +61,30 @@ func ContextWriter(ctx context.Context) Writer {
|
|||
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
|
||||
func NewWriter(out console.File) (Writer, error) {
|
||||
_, isTerminal := term.GetFdInfo(out)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue