diff options
| author | 2026-04-02 06:23:30 +0000 | |
|---|---|---|
| committer | 2026-04-02 06:28:39 +0000 | |
| commit | a041d523de389b65b98a5373a8034041db2a8d83 (patch) | |
| tree | 7b423dc735f463be616045f2c3c2095a7737aca7 /internal/progress | |
| parent | research: Add dynamic pack resources (diff) | |
| signature | No signature | |
*: Remove
Diffstat (limited to 'internal/progress')
| -rw-r--r-- | internal/progress/constants.go | 11 | ||||
| -rw-r--r-- | internal/progress/consume.go | 15 | ||||
| -rw-r--r-- | internal/progress/counters.go | 23 | ||||
| -rw-r--r-- | internal/progress/doc.go | 2 | ||||
| -rw-r--r-- | internal/progress/humanize.go | 22 | ||||
| -rw-r--r-- | internal/progress/meter.go | 30 | ||||
| -rw-r--r-- | internal/progress/new.go | 21 | ||||
| -rw-r--r-- | internal/progress/options.go | 22 | ||||
| -rw-r--r-- | internal/progress/refresh.go | 25 | ||||
| -rw-r--r-- | internal/progress/render.go | 38 | ||||
| -rw-r--r-- | internal/progress/set.go | 39 | ||||
| -rw-r--r-- | internal/progress/stop.go | 20 |
12 files changed, 0 insertions, 268 deletions
diff --git a/internal/progress/constants.go b/internal/progress/constants.go deleted file mode 100644 index c73adb2e..00000000 --- a/internal/progress/constants.go +++ /dev/null @@ -1,11 +0,0 @@ -package progress - -import "time" - -const ( - // DefaultDelay is the default delayed-progress interval. - DefaultDelay = time.Second - - updateInterval = time.Second - throughputInterval = 500 * time.Millisecond -) diff --git a/internal/progress/consume.go b/internal/progress/consume.go deleted file mode 100644 index fa142f49..00000000 --- a/internal/progress/consume.go +++ /dev/null @@ -1,15 +0,0 @@ -package progress - -import "time" - -func (meter *Meter) consumeUpdateTick(now time.Time) bool { - if now.Before(meter.nextUpdateAt) { - return false - } - - for !now.Before(meter.nextUpdateAt) { - meter.nextUpdateAt = meter.nextUpdateAt.Add(updateInterval) - } - - return true -} diff --git a/internal/progress/counters.go b/internal/progress/counters.go deleted file mode 100644 index 7c7a5085..00000000 --- a/internal/progress/counters.go +++ /dev/null @@ -1,23 +0,0 @@ -package progress - -import ( - "fmt" - - "codeberg.org/lindenii/furgit/internal/intconv" -) - -func (meter *Meter) renderCounters() string { - if meter.total > 0 { - u, err := intconv.Uint64ToInt(meter.lastDone * 100 / meter.total) - if err != nil { - return "overflow" - // TODO - } - - meter.lastPercent = u - - return fmt.Sprintf("%3d%% (%d/%d)%s", meter.lastPercent, meter.lastDone, meter.total, meter.throughputSuffix) - } - - return fmt.Sprintf("%d%s", meter.lastDone, meter.throughputSuffix) -} diff --git a/internal/progress/doc.go b/internal/progress/doc.go deleted file mode 100644 index 964ebdec..00000000 --- a/internal/progress/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package progress supplies meters intended to be used on sideband 2. -package progress diff --git a/internal/progress/humanize.go b/internal/progress/humanize.go deleted file mode 100644 index f13845f7..00000000 --- a/internal/progress/humanize.go +++ /dev/null @@ -1,22 +0,0 @@ -package progress - -import "fmt" - -func humanizeBytes(n uint64) string { - const unit = 1024 - if n < unit { - return fmt.Sprintf("%d B", n) - } - - value := float64(n) - - units := []string{"KiB", "MiB", "GiB", "TiB", "PiB"} - for i := range units { - value /= unit - if value < unit || i == len(units)-1 { - return fmt.Sprintf("%.2f %s", value, units[i]) - } - } - - return fmt.Sprintf("%d B", n) -} diff --git a/internal/progress/meter.go b/internal/progress/meter.go deleted file mode 100644 index bdf0e613..00000000 --- a/internal/progress/meter.go +++ /dev/null @@ -1,30 +0,0 @@ -package progress - -import ( - "time" - - "codeberg.org/lindenii/furgit/common/iowrap" -) - -// Meter renders one in-place progress line. -type Meter struct { - writer iowrap.WriteFlusher - - title string - total uint64 - delay time.Duration - sparse bool - throughput bool - - startedAt time.Time - nextUpdateAt time.Time - nextThroughput time.Time - - lastDone uint64 - lastBytes uint64 - lastPercent int - lastCounterW int - sawValue bool - - throughputSuffix string -} diff --git a/internal/progress/new.go b/internal/progress/new.go deleted file mode 100644 index 2c304279..00000000 --- a/internal/progress/new.go +++ /dev/null @@ -1,21 +0,0 @@ -package progress - -import "time" - -// New creates one progress meter. -func New(opts Options) *Meter { - now := time.Now() - - return &Meter{ - writer: opts.Writer, - title: opts.Title, - total: opts.Total, - delay: max(opts.Delay, time.Duration(0)), - sparse: opts.Sparse, - throughput: opts.Throughput, - startedAt: now, - nextUpdateAt: now.Add(updateInterval), - nextThroughput: now.Add(throughputInterval), - lastPercent: -1, - } -} diff --git a/internal/progress/options.go b/internal/progress/options.go deleted file mode 100644 index 40dd9758..00000000 --- a/internal/progress/options.go +++ /dev/null @@ -1,22 +0,0 @@ -package progress - -import ( - "time" - - "codeberg.org/lindenii/furgit/common/iowrap" -) - -// Options configures one progress meter. -type Options struct { - Writer iowrap.WriteFlusher - - Title string - Total uint64 - - // Delay suppresses progress output until Delay has elapsed since Start. - Delay time.Duration - // Sparse forces one final 100% line at Stop when the caller sampled updates. - Sparse bool - // Throughput appends ", <total> | <rate>/s" and refreshes rate every 500ms. - Throughput bool -} diff --git a/internal/progress/refresh.go b/internal/progress/refresh.go deleted file mode 100644 index ed1782db..00000000 --- a/internal/progress/refresh.go +++ /dev/null @@ -1,25 +0,0 @@ -package progress - -import "time" - -func (meter *Meter) refreshThroughput(now time.Time) { - if !meter.throughput { - return - } - - if meter.nextThroughput.After(now) && meter.throughputSuffix != "" { - return - } - - for !now.Before(meter.nextThroughput) { - meter.nextThroughput = meter.nextThroughput.Add(throughputInterval) - } - - elapsed := now.Sub(meter.startedAt) - if elapsed <= 0 { - return - } - - rate := uint64(float64(meter.lastBytes) / elapsed.Seconds()) - meter.throughputSuffix = ", " + humanizeBytes(meter.lastBytes) + " | " + humanizeBytes(rate) + "/s" -} diff --git a/internal/progress/render.go b/internal/progress/render.go deleted file mode 100644 index ae188c0e..00000000 --- a/internal/progress/render.go +++ /dev/null @@ -1,38 +0,0 @@ -package progress - -import ( - "strings" - "time" - - "codeberg.org/lindenii/furgit/internal/utils" -) - -func (meter *Meter) render(now time.Time, eol string) { - if meter.delay > 0 && now.Sub(meter.startedAt) < meter.delay && eol == "\r" { - return - } - - meter.refreshThroughput(now) - - counters := meter.renderCounters() - - clear1 := 0 - if len(counters) < meter.lastCounterW { - clear1 = meter.lastCounterW - len(counters) + 1 - } - - meter.lastCounterW = len(counters) - - line := meter.title + ": " + counters - if clear1 > 0 { - line += strings.Repeat(" ", clear1) - } - - line += eol - - utils.BestEffortFprintf(meter.writer, "%s", line) - - if meter.writer != nil { - _ = meter.writer.Flush() - } -} diff --git a/internal/progress/set.go b/internal/progress/set.go deleted file mode 100644 index 06cf889d..00000000 --- a/internal/progress/set.go +++ /dev/null @@ -1,39 +0,0 @@ -package progress - -import ( - "time" - - "codeberg.org/lindenii/furgit/internal/intconv" -) - -// Set records current progress and renders when percent changed or the 1s tick -// elapsed. -func (meter *Meter) Set(done uint64, bytes uint64) { - meter.lastDone = done - meter.lastBytes = bytes - meter.sawValue = true - - if meter.writer == nil { - return - } - - now := time.Now() - forced := meter.consumeUpdateTick(now) - - percentChanged := false - - if meter.total > 0 { - percent, err := intconv.Uint64ToInt(done * 100 / meter.total) - if err != nil { - return // TODO - } - - percentChanged = percent != meter.lastPercent - } - - if !percentChanged && !forced { - return - } - - meter.render(now, "\r") -} diff --git a/internal/progress/stop.go b/internal/progress/stop.go deleted file mode 100644 index fdc3f9af..00000000 --- a/internal/progress/stop.go +++ /dev/null @@ -1,20 +0,0 @@ -package progress - -import "time" - -// Stop forces the final progress line and appends ", <msg>.". -func (meter *Meter) Stop(msg string) { - if !meter.sawValue || meter.writer == nil { - return - } - - if msg == "" { - msg = "done" - } - - if meter.sparse && meter.total > 0 && meter.lastDone != meter.total { - meter.lastDone = meter.total - } - - meter.render(time.Now(), ", "+msg+".\n") -} |
