forked from TrueCloudLab/restic
restore: add deletions to progress output
This commit is contained in:
parent
f4b15fdd96
commit
aa8e18cf32
8 changed files with 24 additions and 3 deletions
|
@ -520,7 +520,7 @@ Only printed if `--verbose=2` is specified.
|
||||||
+----------------------+-----------------------------------------------------------+
|
+----------------------+-----------------------------------------------------------+
|
||||||
| ``message_type`` | Always "verbose_status" |
|
| ``message_type`` | Always "verbose_status" |
|
||||||
+----------------------+-----------------------------------------------------------+
|
+----------------------+-----------------------------------------------------------+
|
||||||
| ``action`` | Either "restored", "updated" or "unchanged" |
|
| ``action`` | Either "restored", "updated", "unchanged" or "deleted" |
|
||||||
+----------------------+-----------------------------------------------------------+
|
+----------------------+-----------------------------------------------------------+
|
||||||
| ``item`` | The item in question |
|
| ``item`` | The item in question |
|
||||||
+----------------------+-----------------------------------------------------------+
|
+----------------------+-----------------------------------------------------------+
|
||||||
|
|
|
@ -499,6 +499,7 @@ func (res *Restorer) removeUnexpectedFiles(target, location string, expectedFile
|
||||||
selectedForRestore, _ := res.SelectFilter(nodeLocation, false)
|
selectedForRestore, _ := res.SelectFilter(nodeLocation, false)
|
||||||
// only delete files that were selected for restore
|
// only delete files that were selected for restore
|
||||||
if selectedForRestore {
|
if selectedForRestore {
|
||||||
|
res.opts.Progress.ReportDeletedFile(nodeLocation)
|
||||||
if !res.opts.DryRun {
|
if !res.opts.DryRun {
|
||||||
if err := fs.RemoveAll(nodeTarget); err != nil {
|
if err := fs.RemoveAll(nodeTarget); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -56,6 +56,8 @@ func (t *jsonPrinter) CompleteItem(messageType ItemAction, item string, size uin
|
||||||
action = "updated"
|
action = "updated"
|
||||||
case ActionFileUnchanged:
|
case ActionFileUnchanged:
|
||||||
action = "unchanged"
|
action = "unchanged"
|
||||||
|
case ActionDeleted:
|
||||||
|
action = "deleted"
|
||||||
default:
|
default:
|
||||||
panic("unknown message type")
|
panic("unknown message type")
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ func TestJSONPrintCompleteItem(t *testing.T) {
|
||||||
{ActionFileRestored, 123, "{\"message_type\":\"verbose_status\",\"action\":\"restored\",\"item\":\"test\",\"size\":123}\n"},
|
{ActionFileRestored, 123, "{\"message_type\":\"verbose_status\",\"action\":\"restored\",\"item\":\"test\",\"size\":123}\n"},
|
||||||
{ActionFileUpdated, 123, "{\"message_type\":\"verbose_status\",\"action\":\"updated\",\"item\":\"test\",\"size\":123}\n"},
|
{ActionFileUpdated, 123, "{\"message_type\":\"verbose_status\",\"action\":\"updated\",\"item\":\"test\",\"size\":123}\n"},
|
||||||
{ActionFileUnchanged, 123, "{\"message_type\":\"verbose_status\",\"action\":\"unchanged\",\"item\":\"test\",\"size\":123}\n"},
|
{ActionFileUnchanged, 123, "{\"message_type\":\"verbose_status\",\"action\":\"unchanged\",\"item\":\"test\",\"size\":123}\n"},
|
||||||
|
{ActionDeleted, 0, "{\"message_type\":\"verbose_status\",\"action\":\"deleted\",\"item\":\"test\",\"size\":0}\n"},
|
||||||
} {
|
} {
|
||||||
term, printer := createJSONProgress()
|
term, printer := createJSONProgress()
|
||||||
printer.CompleteItem(data.action, "test", data.size)
|
printer.CompleteItem(data.action, "test", data.size)
|
||||||
|
|
|
@ -51,6 +51,7 @@ const (
|
||||||
ActionFileRestored ItemAction = "file restored"
|
ActionFileRestored ItemAction = "file restored"
|
||||||
ActionFileUpdated ItemAction = "file updated"
|
ActionFileUpdated ItemAction = "file updated"
|
||||||
ActionFileUnchanged ItemAction = "file unchanged"
|
ActionFileUnchanged ItemAction = "file unchanged"
|
||||||
|
ActionDeleted ItemAction = "deleted"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewProgress(printer ProgressPrinter, interval time.Duration) *Progress {
|
func NewProgress(printer ProgressPrinter, interval time.Duration) *Progress {
|
||||||
|
@ -126,6 +127,17 @@ func (p *Progress) AddSkippedFile(name string, size uint64) {
|
||||||
p.printer.CompleteItem(ActionFileUnchanged, name, size)
|
p.printer.CompleteItem(ActionFileUnchanged, name, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Progress) ReportDeletedFile(name string) {
|
||||||
|
if p == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
p.m.Lock()
|
||||||
|
defer p.m.Unlock()
|
||||||
|
|
||||||
|
p.printer.CompleteItem(ActionDeleted, name, 0)
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Progress) Finish() {
|
func (p *Progress) Finish() {
|
||||||
p.updater.Done()
|
p.updater.Done()
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,10 +181,12 @@ func TestProgressTypes(t *testing.T) {
|
||||||
progress.AddFile(0)
|
progress.AddFile(0)
|
||||||
progress.AddProgress("dir", ActionDirRestored, fileSize, fileSize)
|
progress.AddProgress("dir", ActionDirRestored, fileSize, fileSize)
|
||||||
progress.AddProgress("new", ActionFileRestored, 0, 0)
|
progress.AddProgress("new", ActionFileRestored, 0, 0)
|
||||||
|
progress.ReportDeletedFile("del")
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
test.Equals(t, itemTrace{
|
test.Equals(t, itemTrace{
|
||||||
itemTraceEntry{ActionDirRestored, "dir", fileSize},
|
itemTraceEntry{ActionDirRestored, "dir", fileSize},
|
||||||
itemTraceEntry{ActionFileRestored, "new", 0},
|
itemTraceEntry{ActionFileRestored, "new", 0},
|
||||||
|
itemTraceEntry{ActionDeleted, "del", 0},
|
||||||
}, items)
|
}, items)
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,12 +48,14 @@ func (t *textPrinter) CompleteItem(messageType ItemAction, item string, size uin
|
||||||
action = "updated"
|
action = "updated"
|
||||||
case ActionFileUnchanged:
|
case ActionFileUnchanged:
|
||||||
action = "unchanged"
|
action = "unchanged"
|
||||||
|
case ActionDeleted:
|
||||||
|
action = "deleted"
|
||||||
default:
|
default:
|
||||||
panic("unknown message type")
|
panic("unknown message type")
|
||||||
}
|
}
|
||||||
|
|
||||||
if messageType == ActionDirRestored {
|
if messageType == ActionDirRestored || messageType == ActionDeleted {
|
||||||
t.terminal.Print(fmt.Sprintf("restored %v", item))
|
t.terminal.Print(fmt.Sprintf("%-9v %v", action, item))
|
||||||
} else {
|
} else {
|
||||||
t.terminal.Print(fmt.Sprintf("%-9v %v with size %v", action, item, ui.FormatBytes(size)))
|
t.terminal.Print(fmt.Sprintf("%-9v %v with size %v", action, item, ui.FormatBytes(size)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,7 @@ func TestPrintCompleteItem(t *testing.T) {
|
||||||
{ActionFileRestored, 123, "restored test with size 123 B"},
|
{ActionFileRestored, 123, "restored test with size 123 B"},
|
||||||
{ActionFileUpdated, 123, "updated test with size 123 B"},
|
{ActionFileUpdated, 123, "updated test with size 123 B"},
|
||||||
{ActionFileUnchanged, 123, "unchanged test with size 123 B"},
|
{ActionFileUnchanged, 123, "unchanged test with size 123 B"},
|
||||||
|
{ActionDeleted, 0, "deleted test"},
|
||||||
} {
|
} {
|
||||||
term, printer := createTextProgress()
|
term, printer := createTextProgress()
|
||||||
printer.CompleteItem(data.action, "test", data.size)
|
printer.CompleteItem(data.action, "test", data.size)
|
||||||
|
|
Loading…
Reference in a new issue