1
0
mirror of https://github.com/schollz/croc.git synced 2024-11-24 16:23:47 +03:00

Add new dependencies

This commit is contained in:
Zack Scholl 2017-10-26 12:37:24 -06:00
parent e24d37db7d
commit b3c7a6aa08
4 changed files with 148 additions and 0 deletions

13
vendor/github.com/schollz/progressbar/README.md generated vendored Normal file
View File

@ -0,0 +1,13 @@
<p align="center">
<img
src="logo.png"
width="100%" border="0" alt="progressbar">
<br>
<a href="https://travis-ci.org/schollz/progressbar"><img src="https://travis-ci.org/schollz/progressbar.svg?branch=master" alt="Build Status"></a>
<a href="https://goreportcard.com/report/github.com/schollz/progressbar"><img src="https://goreportcard.com/badge/github.com/schollz/progressbar" alt="Go Report Card"></a>
<a href="https://godoc.org/github.com/schollz/progressbar"><img src="https://godoc.org/github.com/schollz/progressbar?status.svg" alt="GoDoc"></a>
</p>
<p align="center">A very simple progress bar.</p>
See the godocs for more info.

16
vendor/github.com/schollz/progressbar/examples/main.go generated vendored Normal file
View File

@ -0,0 +1,16 @@
package main
import (
"time"
"github.com/schollz/progressbar"
)
func main() {
bar := progressbar.New(100)
bar.Reset()
for i := 0; i < 100; i++ {
bar.Add(1)
time.Sleep(10 * time.Millisecond)
}
}

110
vendor/github.com/schollz/progressbar/progressbar.go generated vendored Normal file
View File

@ -0,0 +1,110 @@
package progressbar
import (
"errors"
"fmt"
"io"
"os"
"strings"
"sync"
"time"
)
// ProgressBar is a thread-safe, simple
// progress bar
type ProgressBar struct {
max int // max number of the counter
size int // size of the saucer
currentNum int
currentPercent int
lastPercent int
currentSaucerSize int
lastShown time.Time
startTime time.Time
w io.Writer
// symbols
symbolFinished string
symbolLeft string
leftBookend string
rightBookend string
sync.RWMutex
}
// New returns a new ProgressBar
// with the specified maximum
func New(max int) *ProgressBar {
p := new(ProgressBar)
p.Lock()
defer p.Unlock()
p.max = max
p.size = 40
p.symbolFinished = "█"
p.symbolLeft = " "
p.leftBookend = "|"
p.rightBookend = "|"
p.w = os.Stdout
p.lastShown = time.Now()
p.startTime = time.Now()
return p
}
// Reset will reset the clock
func (p *ProgressBar) Reset() {
p.Lock()
defer p.Unlock()
p.lastShown = time.Now()
p.startTime = time.Now()
}
// Set the max of the progress bar
func (p *ProgressBar) SetMax(num int) {
p.Lock()
defer p.Unlock()
p.max = num
}
// Add a certain amount to the progress bar
func (p *ProgressBar) Add(num int) error {
p.Lock()
p.currentNum += num
percent := float64(p.currentNum) / float64(p.max)
p.currentSaucerSize = int(percent * float64(p.size))
p.currentPercent = int(percent * 100)
updateBar := p.currentPercent != p.lastPercent && p.currentPercent > 0
p.lastPercent = p.currentPercent
p.Unlock()
if updateBar {
return p.Show()
}
return nil
}
// Show will print the current progress bar
func (p *ProgressBar) Show() error {
p.RLock()
defer p.RUnlock()
if p.currentNum > p.max {
return errors.New("current number exceeds max")
}
secondsLeft := time.Since(p.startTime).Seconds() / float64(p.currentNum) * (float64(p.max) - float64(p.currentNum))
s := fmt.Sprintf("\r%3d%% %s%s%s%s [%s:%s] ",
p.currentPercent,
p.leftBookend,
strings.Repeat(p.symbolFinished, p.currentSaucerSize),
strings.Repeat(p.symbolLeft, p.size-p.currentSaucerSize),
p.rightBookend,
time.Since(p.startTime).Round(time.Second).String(),
(time.Duration(secondsLeft) * time.Second).String(),
)
_, err := io.WriteString(p.w, s)
if err != nil {
return err
}
if f, ok := p.w.(*os.File); ok {
f.Sync()
}
return nil
}

View File

@ -0,0 +1,9 @@
package progressbar
func ExampleBar() {
bar := New(10)
bar.Add(1)
// Output:
// 10% |████ | [0s:0s]
}