diff --git a/cmd/restic/cmd_debug.go b/cmd/restic/cmd_debug.go index 38bc30ec8..66ce86522 100644 --- a/cmd/restic/cmd_debug.go +++ b/cmd/restic/cmd_debug.go @@ -105,9 +105,7 @@ type Blob struct { func printPacks(ctx context.Context, repo *repository.Repository, wr io.Writer) error { return repo.List(ctx, restic.PackFile, func(id restic.ID, size int64) error { - h := restic.Handle{Type: restic.PackFile, Name: id.String()} - - blobs, _, err := pack.List(repo.Key(), backend.ReaderAt(ctx, repo.Backend(), h), size) + blobs, _, err := repo.ListPack(ctx, id, size) if err != nil { Warnf("error for pack %v: %v\n", id.Str(), err) return nil @@ -312,14 +310,14 @@ func decryptUnsigned(ctx context.Context, k *crypto.Key, buf []byte) []byte { return out } -func loadBlobs(ctx context.Context, repo restic.Repository, pack restic.ID, list []restic.Blob) error { +func loadBlobs(ctx context.Context, repo restic.Repository, packID restic.ID, list []restic.Blob) error { dec, err := zstd.NewReader(nil) if err != nil { panic(err) } be := repo.Backend() h := restic.Handle{ - Name: pack.String(), + Name: packID.String(), Type: restic.PackFile, } for _, blob := range list { @@ -527,7 +525,7 @@ func examinePack(ctx context.Context, repo restic.Repository, id restic.ID) erro Printf(" ========================================\n") Printf(" inspect the pack itself\n") - blobs, _, err := pack.List(repo.Key(), backend.ReaderAt(ctx, repo.Backend(), h), fi.Size) + blobs, _, err := repo.ListPack(ctx, id, fi.Size) if err != nil { return fmt.Errorf("pack %v: %v", id.Str(), err) } @@ -558,7 +556,7 @@ func checkPackSize(blobs []restic.Blob, fileSize int64) { size += uint64(pack.CalculateHeaderSize(blobs)) if uint64(fileSize) != size { - Printf(" file sizes do not match: computed %v from index, file size is %v\n", size, fileSize) + Printf(" file sizes do not match: computed %v, file size is %v\n", size, fileSize) } else { Printf(" file sizes match\n") } diff --git a/internal/repository/repository.go b/internal/repository/repository.go index 7a2546bfd..33eab8cb0 100644 --- a/internal/repository/repository.go +++ b/internal/repository/repository.go @@ -163,12 +163,6 @@ func (r *Repository) SetDryRun() { r.be = dryrun.New(r.be) } -// PrefixLength returns the number of bytes required so that all prefixes of -// all IDs of type t are unique. -func (r *Repository) PrefixLength(ctx context.Context, t restic.FileType) (int, error) { - return restic.PrefixLength(ctx, r.be, t) -} - // LoadUnpacked loads and decrypts the file with the given type and ID, using // the supplied buffer (which must be empty). If the buffer is nil, a new // buffer will be allocated and returned. @@ -575,7 +569,7 @@ func (r *Repository) Index() restic.MasterIndex { // SetIndex instructs the repository to use the given index. func (r *Repository) SetIndex(i restic.MasterIndex) error { r.idx = i.(*MasterIndex) - return r.PrepareCache() + return r.prepareCache() } // LoadIndex loads all index files from the backend in parallel and stores them @@ -617,7 +611,7 @@ func (r *Repository) LoadIndex(ctx context.Context) error { } // remove index files from the cache which have been removed in the repo - return r.PrepareCache() + return r.prepareCache() } // CreateIndexFromPacks creates a new index by reading all given pack files (with sizes). @@ -683,9 +677,9 @@ func (r *Repository) CreateIndexFromPacks(ctx context.Context, packsize map[rest return invalid, nil } -// PrepareCache initializes the local cache. indexIDs is the list of IDs of +// prepareCache initializes the local cache. indexIDs is the list of IDs of // index files still present in the repo. -func (r *Repository) PrepareCache() error { +func (r *Repository) prepareCache() error { if r.Cache == nil { return nil } diff --git a/internal/restic/backend_find.go b/internal/restic/backend_find.go index 4be2f523f..8ce57dd1d 100644 --- a/internal/restic/backend_find.go +++ b/internal/restic/backend_find.go @@ -61,42 +61,3 @@ func Find(ctx context.Context, be Lister, t FileType, prefix string) (string, er return "", &NoIDByPrefixError{prefix} } - -const minPrefixLength = 8 - -// PrefixLength returns the number of bytes required so that all prefixes of -// all names of type t are unique. -func PrefixLength(ctx context.Context, be Lister, t FileType) (int, error) { - // load all IDs of the given type - list := make([]string, 0, 100) - - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - err := be.List(ctx, t, func(fi FileInfo) error { - list = append(list, fi.Name) - return nil - }) - - if err != nil { - return 0, err - } - - // select prefixes of length l, test if the last one is the same as the current one - var id ID -outer: - for l := minPrefixLength; l < len(id); l++ { - var last string - - for _, name := range list { - if last == name[:l] { - continue outer - } - last = name[:l] - } - - return l, nil - } - - return len(id), nil -} diff --git a/internal/restic/backend_find_test.go b/internal/restic/backend_find_test.go index 52eb38ef3..bd1e6f7e6 100644 --- a/internal/restic/backend_find_test.go +++ b/internal/restic/backend_find_test.go @@ -75,44 +75,3 @@ func TestFind(t *testing.T) { t.Errorf("Find should not return a match on error.") } } - -func TestPrefixLength(t *testing.T) { - list := samples - - m := mockBackend{} - m.list = func(ctx context.Context, t FileType, fn func(FileInfo) error) error { - for _, id := range list { - err := fn(FileInfo{Name: id.String()}) - if err != nil { - return err - } - } - return nil - } - - l, err := PrefixLength(context.TODO(), m, SnapshotFile) - if err != nil { - t.Error(err) - } - if l != 19 { - t.Errorf("wrong prefix length returned, want %d, got %d", 19, l) - } - - list = samples[:3] - l, err = PrefixLength(context.TODO(), m, SnapshotFile) - if err != nil { - t.Error(err) - } - if l != 19 { - t.Errorf("wrong prefix length returned, want %d, got %d", 19, l) - } - - list = samples[3:] - l, err = PrefixLength(context.TODO(), m, SnapshotFile) - if err != nil { - t.Error(err) - } - if l != 8 { - t.Errorf("wrong prefix length returned, want %d, got %d", 8, l) - } -}