Loop over index files for 'list blobs'

=> reduces memory consumption a lot!
This commit is contained in:
Alexander Weiss 2020-06-14 09:50:11 +02:00
parent 285b5236c2
commit b5543cff5d
2 changed files with 16 additions and 10 deletions

View file

@ -0,0 +1,6 @@
Enhancement: Optimize `list blobs` command
We've changed the implementation of `list blobs` which should be now a bit faster
and consume almost no memory even for large repositories.
https://github.com/restic/restic/pull/2786

View file

@ -2,7 +2,7 @@ package main
import ( import (
"github.com/restic/restic/internal/errors" "github.com/restic/restic/internal/errors"
"github.com/restic/restic/internal/index" "github.com/restic/restic/internal/repository"
"github.com/restic/restic/internal/restic" "github.com/restic/restic/internal/restic"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -60,16 +60,16 @@ func runList(cmd *cobra.Command, opts GlobalOptions, args []string) error {
case "locks": case "locks":
t = restic.LockFile t = restic.LockFile
case "blobs": case "blobs":
idx, err := index.Load(opts.ctx, repo, nil) return repo.List(opts.ctx, restic.IndexFile, func(id restic.ID, size int64) error {
idx, err := repository.LoadIndex(opts.ctx, repo, id)
if err != nil { if err != nil {
return err return err
} }
for blobs := range idx.Each(opts.ctx) {
for _, pack := range idx.Packs { Printf("%v %v\n", blobs.Type, blobs.ID)
for _, entry := range pack.Entries {
Printf("%v %v\n", entry.Type, entry.ID)
}
} }
return nil
})
return nil return nil
default: default: