mirror of
https://github.com/rclone/rclone.git
synced 2024-11-07 09:04:52 +01:00
cmd/ncdu: fix screen corruption when logging
Before this change if logs were not redirected, logging would corrupt the terminal screen. This commit stores the logs (max ~100 lines) in an array and print them when the program exits.
This commit is contained in:
parent
3ddf824251
commit
0ea2ce3674
@ -19,6 +19,7 @@ import (
|
||||
"github.com/rclone/rclone/cmd/ncdu/scan"
|
||||
"github.com/rclone/rclone/fs"
|
||||
"github.com/rclone/rclone/fs/fspath"
|
||||
"github.com/rclone/rclone/fs/log"
|
||||
"github.com/rclone/rclone/fs/operations"
|
||||
"github.com/rivo/uniseg"
|
||||
"github.com/spf13/cobra"
|
||||
@ -911,6 +912,28 @@ func (u *UI) Show() error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("screen init: %w", err)
|
||||
}
|
||||
|
||||
// Hijack fs.LogPrint so that it doesn't corrupt the screen.
|
||||
if logPrint := fs.LogPrint; !log.Redirected() {
|
||||
type log struct {
|
||||
text string
|
||||
level fs.LogLevel
|
||||
}
|
||||
var logs []log
|
||||
fs.LogPrint = func(level fs.LogLevel, text string) {
|
||||
if len(logs) > 100 {
|
||||
logs = logs[len(logs)-100:]
|
||||
}
|
||||
logs = append(logs, log{level: level, text: text})
|
||||
}
|
||||
defer func() {
|
||||
fs.LogPrint = logPrint
|
||||
for i := range logs {
|
||||
logPrint(logs[i].level, logs[i].text)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
defer u.s.Fini()
|
||||
|
||||
// scan the disk in the background
|
||||
|
Loading…
Reference in New Issue
Block a user