diff --git a/src/cmds/restic/cmd_restore.go b/src/cmds/restic/cmd_restore.go index eba5026c3..1ec9b274e 100644 --- a/src/cmds/restic/cmd_restore.go +++ b/src/cmds/restic/cmd_restore.go @@ -136,7 +136,7 @@ func runRestore(opts RestoreOptions, gopts GlobalOptions, args []string) error { Verbosef("restoring %s to %s\n", res.Snapshot(), opts.Target) - stat, err := res.Scan() + stat, err := res.Scan(newScanProgress(gopts)) if err != nil { return err } diff --git a/src/restic/restorer.go b/src/restic/restorer.go index 5af62e6ef..36e7fc73b 100644 --- a/src/restic/restorer.go +++ b/src/restic/restorer.go @@ -41,16 +41,24 @@ func NewRestorer(repo Repository, id ID) (*Restorer, error) { } // Scan traverses the directories/files to be restored to collect restic.Stat information -func (res *Restorer) Scan() (Stat, error) { +func (res *Restorer) Scan(p *Progress) (Stat, error) { + p.Start() + defer p.Done() + var stat Stat err := res.walk("", *res.sn.Tree, func(node *Node, dir string) error { + s := Stat{} if node.Type == "dir" { - stat.Add(Stat{Dirs: 1}) + s.Dirs++ } else { - stat.Add(Stat{Files: 1, Bytes: node.Size}) + s.Files++ + s.Bytes += node.Size } + p.Report(s) + stat.Add(s) + return nil })