summaryrefslogtreecommitdiff
path: root/vendor/github.com/vbauerster/mpb/v7
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/vbauerster/mpb/v7')
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/.travis.yml11
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/README.md3
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/bar.go89
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/decor/decorator.go1
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/decor/on_abort.go38
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/decor/on_complete.go2
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/go.mod2
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/go.sum4
-rw-r--r--vendor/github.com/vbauerster/mpb/v7/proxyreader.go15
9 files changed, 112 insertions, 53 deletions
diff --git a/vendor/github.com/vbauerster/mpb/v7/.travis.yml b/vendor/github.com/vbauerster/mpb/v7/.travis.yml
deleted file mode 100644
index 9a203a67d..000000000
--- a/vendor/github.com/vbauerster/mpb/v7/.travis.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-language: go
-arch:
- - amd64
- - ppc64le
-
-go:
- - 1.14.x
-
-script:
- - go test -race ./...
- - for i in _examples/*/; do go build $i/*.go || exit 1; done
diff --git a/vendor/github.com/vbauerster/mpb/v7/README.md b/vendor/github.com/vbauerster/mpb/v7/README.md
index 90d4fe639..ee1b21231 100644
--- a/vendor/github.com/vbauerster/mpb/v7/README.md
+++ b/vendor/github.com/vbauerster/mpb/v7/README.md
@@ -1,8 +1,7 @@
# Multi Progress Bar
[![GoDoc](https://pkg.go.dev/badge/github.com/vbauerster/mpb)](https://pkg.go.dev/github.com/vbauerster/mpb/v7)
-[![Build Status](https://travis-ci.org/vbauerster/mpb.svg?branch=master)](https://travis-ci.org/vbauerster/mpb)
-[![Go Report Card](https://goreportcard.com/badge/github.com/vbauerster/mpb)](https://goreportcard.com/report/github.com/vbauerster/mpb)
+[![Test status](https://github.com/vbauerster/mpb/actions/workflows/test.yml/badge.svg)](https://github.com/vbauerster/mpb/actions/workflows/test.yml)
[![Donate with PayPal](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/vbauerster)
**mpb** is a Go lib for rendering progress bars in terminal applications.
diff --git a/vendor/github.com/vbauerster/mpb/v7/bar.go b/vendor/github.com/vbauerster/mpb/v7/bar.go
index dabe1a475..d07dc165c 100644
--- a/vendor/github.com/vbauerster/mpb/v7/bar.go
+++ b/vendor/github.com/vbauerster/mpb/v7/bar.go
@@ -8,6 +8,7 @@ import (
"log"
"runtime/debug"
"strings"
+ "sync"
"time"
"github.com/acarl005/stripansi"
@@ -50,11 +51,11 @@ type bState struct {
total int64
current int64
refill int64
- lastN int64
- iterated bool
+ lastIncrement int64
trimSpace bool
completed bool
completeFlushed bool
+ aborted bool
triggerComplete bool
dropOnComplete bool
noPop bool
@@ -189,8 +190,7 @@ func (b *Bar) SetTotal(total int64, triggerComplete bool) {
func (b *Bar) SetCurrent(current int64) {
select {
case b.operateState <- func(s *bState) {
- s.iterated = true
- s.lastN = current - s.current
+ s.lastIncrement = current - s.current
s.current = current
if s.triggerComplete && s.current >= s.total {
s.current = s.total
@@ -214,10 +214,12 @@ func (b *Bar) IncrBy(n int) {
// IncrInt64 increments progress by amount of n.
func (b *Bar) IncrInt64(n int64) {
+ if n <= 0 {
+ return
+ }
select {
case b.operateState <- func(s *bState) {
- s.iterated = true
- s.lastN = n
+ s.lastIncrement = n
s.current += n
if s.triggerComplete && s.current >= s.total {
s.current = s.total
@@ -236,10 +238,18 @@ func (b *Bar) IncrInt64(n int64) {
func (b *Bar) DecoratorEwmaUpdate(dur time.Duration) {
select {
case b.operateState <- func(s *bState) {
- ewmaIterationUpdate(false, s, dur)
+ if s.lastIncrement > 0 {
+ s.decoratorEwmaUpdate(dur)
+ s.lastIncrement = 0
+ } else {
+ panic("increment required before ewma iteration update")
+ }
}:
case <-b.done:
- ewmaIterationUpdate(true, b.cacheState, dur)
+ if b.cacheState.lastIncrement > 0 {
+ b.cacheState.decoratorEwmaUpdate(dur)
+ b.cacheState.lastIncrement = 0
+ }
}
}
@@ -249,9 +259,7 @@ func (b *Bar) DecoratorEwmaUpdate(dur time.Duration) {
func (b *Bar) DecoratorAverageAdjust(start time.Time) {
select {
case b.operateState <- func(s *bState) {
- for _, d := range s.averageDecorators {
- d.AverageAdjust(start)
- }
+ s.decoratorAverageAdjust(start)
}:
case <-b.done:
}
@@ -275,6 +283,8 @@ func (b *Bar) Abort(drop bool) {
close(done)
return
}
+ s.aborted = true
+ b.cancel()
// container must be run during lifetime of this inner goroutine
// we control this by done channel declared above
go func() {
@@ -295,7 +305,6 @@ func (b *Bar) Abort(drop bool) {
}
close(done) // release hold of Abort
}()
- b.cancel()
}:
// guarantee: container is alive during lifetime of this hold
<-done
@@ -321,10 +330,7 @@ func (b *Bar) serve(ctx context.Context, s *bState) {
case op := <-b.operateState:
op(s)
case <-ctx.Done():
- // Notifying decorators about shutdown event
- for _, sl := range s.shutdownListeners {
- sl.Shutdown()
- }
+ s.decoratorShutdownNotify()
b.cacheState = s
close(b.done)
return
@@ -481,6 +487,45 @@ func (s *bState) wSyncTable() [][]chan int {
return table
}
+func (s bState) decoratorEwmaUpdate(dur time.Duration) {
+ wg := new(sync.WaitGroup)
+ wg.Add(len(s.ewmaDecorators))
+ for _, d := range s.ewmaDecorators {
+ d := d
+ go func() {
+ d.EwmaUpdate(s.lastIncrement, dur)
+ wg.Done()
+ }()
+ }
+ wg.Wait()
+}
+
+func (s bState) decoratorAverageAdjust(start time.Time) {
+ wg := new(sync.WaitGroup)
+ wg.Add(len(s.averageDecorators))
+ for _, d := range s.averageDecorators {
+ d := d
+ go func() {
+ d.AverageAdjust(start)
+ wg.Done()
+ }()
+ }
+ wg.Wait()
+}
+
+func (s bState) decoratorShutdownNotify() {
+ wg := new(sync.WaitGroup)
+ wg.Add(len(s.shutdownListeners))
+ for _, d := range s.shutdownListeners {
+ d := d
+ go func() {
+ d.Shutdown()
+ wg.Done()
+ }()
+ }
+ wg.Wait()
+}
+
func newStatistics(tw int, s *bState) decor.Statistics {
return decor.Statistics{
ID: s.id,
@@ -489,6 +534,7 @@ func newStatistics(tw int, s *bState) decor.Statistics {
Current: s.current,
Refill: s.refill,
Completed: s.completeFlushed,
+ Aborted: s.aborted,
}
}
@@ -499,17 +545,6 @@ func extractBaseDecorator(d decor.Decorator) decor.Decorator {
return d
}
-func ewmaIterationUpdate(done bool, s *bState, dur time.Duration) {
- if !done && !s.iterated {
- panic("increment required before ewma iteration update")
- } else {
- s.iterated = false
- }
- for _, d := range s.ewmaDecorators {
- d.EwmaUpdate(s.lastN, dur)
- }
-}
-
func makePanicExtender(p interface{}) extenderFunc {
pstr := fmt.Sprint(p)
stack := debug.Stack()
diff --git a/vendor/github.com/vbauerster/mpb/v7/decor/decorator.go b/vendor/github.com/vbauerster/mpb/v7/decor/decorator.go
index e81fae367..9fec57b15 100644
--- a/vendor/github.com/vbauerster/mpb/v7/decor/decorator.go
+++ b/vendor/github.com/vbauerster/mpb/v7/decor/decorator.go
@@ -53,6 +53,7 @@ type Statistics struct {
Current int64
Refill int64
Completed bool
+ Aborted bool
}
// Decorator interface.
diff --git a/vendor/github.com/vbauerster/mpb/v7/decor/on_abort.go b/vendor/github.com/vbauerster/mpb/v7/decor/on_abort.go
new file mode 100644
index 000000000..7ece120a2
--- /dev/null
+++ b/vendor/github.com/vbauerster/mpb/v7/decor/on_abort.go
@@ -0,0 +1,38 @@
+package decor
+
+// OnAbort returns decorator, which wraps provided decorator with sole
+// purpose to display provided message on abort event. It has no effect
+// if bar.Abort(drop bool) is called with true argument.
+//
+// `decorator` Decorator to wrap
+//
+// `message` message to display on abort event
+//
+func OnAbort(decorator Decorator, message string) Decorator {
+ d := &onAbortWrapper{
+ Decorator: decorator,
+ msg: message,
+ }
+ if md, ok := decorator.(*mergeDecorator); ok {
+ d.Decorator, md.Decorator = md.Decorator, d
+ return md
+ }
+ return d
+}
+
+type onAbortWrapper struct {
+ Decorator
+ msg string
+}
+
+func (d *onAbortWrapper) Decor(s Statistics) string {
+ if s.Aborted {
+ wc := d.GetConf()
+ return wc.FormatMsg(d.msg)
+ }
+ return d.Decorator.Decor(s)
+}
+
+func (d *onAbortWrapper) Base() Decorator {
+ return d.Decorator
+}
diff --git a/vendor/github.com/vbauerster/mpb/v7/decor/on_complete.go b/vendor/github.com/vbauerster/mpb/v7/decor/on_complete.go
index f46b19aba..c7c9e4d31 100644
--- a/vendor/github.com/vbauerster/mpb/v7/decor/on_complete.go
+++ b/vendor/github.com/vbauerster/mpb/v7/decor/on_complete.go
@@ -1,6 +1,6 @@
package decor
-// OnComplete returns decorator, which wraps provided decorator, with
+// OnComplete returns decorator, which wraps provided decorator with
// sole purpose to display provided message on complete event.
//
// `decorator` Decorator to wrap
diff --git a/vendor/github.com/vbauerster/mpb/v7/go.mod b/vendor/github.com/vbauerster/mpb/v7/go.mod
index fe10588ef..32008c66c 100644
--- a/vendor/github.com/vbauerster/mpb/v7/go.mod
+++ b/vendor/github.com/vbauerster/mpb/v7/go.mod
@@ -4,7 +4,7 @@ require (
github.com/VividCortex/ewma v1.2.0
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d
github.com/mattn/go-runewidth v0.0.13
- golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0
+ golang.org/x/sys v0.0.0-20211124211545-fe61309f8881
)
go 1.14
diff --git a/vendor/github.com/vbauerster/mpb/v7/go.sum b/vendor/github.com/vbauerster/mpb/v7/go.sum
index ce769eaef..6fed396bb 100644
--- a/vendor/github.com/vbauerster/mpb/v7/go.sum
+++ b/vendor/github.com/vbauerster/mpb/v7/go.sum
@@ -6,5 +6,5 @@ github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0 h1:xrCZDmdtoloIiooiA9q0OQb9r8HejIHYoHGhGCe1pGg=
-golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 h1:TyHqChC80pFkXWraUUf6RuB5IqFdQieMLwwCJokV2pc=
+golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
diff --git a/vendor/github.com/vbauerster/mpb/v7/proxyreader.go b/vendor/github.com/vbauerster/mpb/v7/proxyreader.go
index 316f438d7..2f20053bd 100644
--- a/vendor/github.com/vbauerster/mpb/v7/proxyreader.go
+++ b/vendor/github.com/vbauerster/mpb/v7/proxyreader.go
@@ -38,14 +38,13 @@ func (x *proxyWriterTo) WriteTo(w io.Writer) (int64, error) {
type ewmaProxyReader struct {
io.ReadCloser // *proxyReader
bar *Bar
- iT time.Time
}
func (x *ewmaProxyReader) Read(p []byte) (int, error) {
+ start := time.Now()
n, err := x.ReadCloser.Read(p)
if n > 0 {
- x.bar.DecoratorEwmaUpdate(time.Since(x.iT))
- x.iT = time.Now()
+ x.bar.DecoratorEwmaUpdate(time.Since(start))
}
return n, err
}
@@ -54,14 +53,13 @@ type ewmaProxyWriterTo struct {
io.ReadCloser // *ewmaProxyReader
wt io.WriterTo // *proxyWriterTo
bar *Bar
- iT time.Time
}
func (x *ewmaProxyWriterTo) WriteTo(w io.Writer) (int64, error) {
+ start := time.Now()
n, err := x.wt.WriteTo(w)
if n > 0 {
- x.bar.DecoratorEwmaUpdate(time.Since(x.iT))
- x.iT = time.Now()
+ x.bar.DecoratorEwmaUpdate(time.Since(start))
}
return n, err
}
@@ -71,10 +69,9 @@ func newProxyReader(r io.Reader, bar *Bar) io.ReadCloser {
rc = &proxyReader{rc, bar}
if wt, isWriterTo := r.(io.WriterTo); bar.hasEwmaDecorators {
- now := time.Now()
- rc = &ewmaProxyReader{rc, bar, now}
+ rc = &ewmaProxyReader{rc, bar}
if isWriterTo {
- rc = &ewmaProxyWriterTo{rc, wt, bar, now}
+ rc = &ewmaProxyWriterTo{rc, wt, bar}
}
} else if isWriterTo {
rc = &proxyWriterTo{rc, wt, bar}