mirror of
https://github.com/restic/restic.git
synced 2026-05-28 04:35:41 -04:00
ui/termstatus: deduplicate error handling
This commit is contained in:
parent
cf34130a05
commit
bd8aad3b9b
1 changed files with 17 additions and 23 deletions
|
|
@ -238,7 +238,7 @@ func (t *Terminal) run(ctx context.Context) {
|
|||
continue
|
||||
}
|
||||
if err := t.clearCurrentLine(t.wr, t.fd); err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
t.logWriteErr(err)
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -250,7 +250,7 @@ func (t *Terminal) run(ctx context.Context) {
|
|||
}
|
||||
|
||||
if _, err := io.WriteString(dst, msg.line); err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
t.logWriteErr(err)
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -268,6 +268,12 @@ func (t *Terminal) run(ctx context.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
func (t *Terminal) logWriteErr(err error) {
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Terminal) writeStatus(status []string, skipUnchanged bool) {
|
||||
var unchanged []bool
|
||||
if skipUnchanged {
|
||||
|
|
@ -292,34 +298,24 @@ func (t *Terminal) writeStatus(status []string, skipUnchanged bool) {
|
|||
// don't write unchanged lines every frame
|
||||
if i < len(status)-1 {
|
||||
// just move the cursor down to the next line
|
||||
if err := t.moveCursorDown(t.wr, t.fd, 1); err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
}
|
||||
t.logWriteErr(t.moveCursorDown(t.wr, t.fd, 1))
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
if err := t.clearCurrentLine(t.wr, t.fd); err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
}
|
||||
t.logWriteErr(t.clearCurrentLine(t.wr, t.fd))
|
||||
|
||||
_, err := t.wr.Write([]byte(line))
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
}
|
||||
t.logWriteErr(err)
|
||||
// all lines except the last one must be followed by a line break
|
||||
if i < len(status)-1 {
|
||||
_, err := t.wr.Write([]byte("\n"))
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
}
|
||||
t.logWriteErr(err)
|
||||
}
|
||||
}
|
||||
|
||||
if len(status) > 0 {
|
||||
if err := t.moveCursorUp(t.wr, t.fd, len(status)-1); err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
}
|
||||
t.logWriteErr(t.moveCursorUp(t.wr, t.fd, len(status)-1))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -344,17 +340,15 @@ func (t *Terminal) runWithoutStatus(ctx context.Context) {
|
|||
dst = t.wr
|
||||
}
|
||||
|
||||
if _, err := io.WriteString(dst, msg.line); err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
}
|
||||
_, err := io.WriteString(dst, msg.line)
|
||||
t.logWriteErr(err)
|
||||
|
||||
case stat := <-t.status:
|
||||
if !slices.Equal(stat.lines, lastStatus) {
|
||||
for _, line := range stat.lines {
|
||||
// Ensure that each message ends with exactly one newline.
|
||||
if _, err := fmt.Fprintln(t.wr, strings.TrimRight(line, "\n")); err != nil {
|
||||
_, _ = fmt.Fprintf(t.errWriter, "write failed: %v\n", err)
|
||||
}
|
||||
_, err := fmt.Fprintln(t.wr, strings.TrimRight(line, "\n"))
|
||||
t.logWriteErr(err)
|
||||
}
|
||||
// Copy the status slice to avoid aliasing
|
||||
lastStatus = append([]string{}, stat.lines...)
|
||||
|
|
|
|||
Loading…
Reference in a new issue