cleanup progress bar helpers

This commit is contained in:
Michael Eischer
2025-09-14 00:23:20 +02:00
parent 8b5dbc18ca
commit 9d3efc2088

View File

@@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"os" "os"
"strconv" "strconv"
"strings"
"time" "time"
"github.com/restic/restic/internal/terminal" "github.com/restic/restic/internal/terminal"
@@ -30,8 +29,8 @@ func calculateProgressInterval(show bool, json bool) time.Duration {
return interval return interval
} }
// newGenericProgressMax returns a progress.Counter that prints to stdout or terminal if provided. // newTerminalProgressMax returns a progress.Counter that prints to terminal if provided.
func newGenericProgressMax(show bool, max uint64, description string, print func(status string, final bool)) *progress.Counter { func newTerminalProgressMax(show bool, max uint64, description string, term *termstatus.Terminal) *progress.Counter {
if !show { if !show {
return nil return nil
} }
@@ -47,12 +46,6 @@ func newGenericProgressMax(show bool, max uint64, description string, print func
ui.FormatDuration(d), ui.FormatPercent(v, max), v, max, description) ui.FormatDuration(d), ui.FormatPercent(v, max), v, max, description)
} }
print(status, final)
})
}
func newTerminalProgressMax(show bool, max uint64, description string, term *termstatus.Terminal) *progress.Counter {
return newGenericProgressMax(show, max, description, func(status string, final bool) {
if final { if final {
term.SetStatus(nil) term.SetStatus(nil)
term.Print(status) term.Print(status)
@@ -62,45 +55,6 @@ func newTerminalProgressMax(show bool, max uint64, description string, term *ter
}) })
} }
func printProgress(status string, final bool) {
canUpdateStatus := terminal.StdoutCanUpdateStatus()
w := terminal.StdoutWidth()
if w > 0 {
if w < 3 {
status = termstatus.Truncate(status, w)
} else {
trunc := termstatus.Truncate(status, w-3)
if len(trunc) < len(status) {
status = trunc + "..."
}
}
}
var carriageControl string
if !(strings.HasSuffix(status, "\r") || strings.HasSuffix(status, "\n")) {
if canUpdateStatus {
carriageControl = "\r"
} else {
carriageControl = "\n"
}
}
if canUpdateStatus {
clearCurrentLine := terminal.ClearCurrentLine(os.Stdout.Fd())
clearCurrentLine(os.Stdout, os.Stdout.Fd())
}
_, _ = os.Stdout.Write([]byte(status + carriageControl))
if final {
_, _ = os.Stdout.Write([]byte("\n"))
}
}
func newIndexProgress(quiet bool, json bool) *progress.Counter {
return newGenericProgressMax(!quiet && !json && terminal.StdoutIsTerminal(), 0, "index files loaded", printProgress)
}
type terminalProgressPrinter struct { type terminalProgressPrinter struct {
term *termstatus.Terminal term *termstatus.Terminal
ui.Message ui.Message