diff --git a/cmd/restic/cmd_cat.go b/cmd/restic/cmd_cat.go index e776b67a1..de579587f 100644 --- a/cmd/restic/cmd_cat.go +++ b/cmd/restic/cmd_cat.go @@ -167,8 +167,7 @@ func runCat(ctx context.Context, gopts GlobalOptions, args []string) error { } for _, t := range []restic.BlobType{restic.DataBlob, restic.TreeBlob} { - bh := restic.BlobHandle{ID: id, Type: t} - if !repo.HasBlob(bh) { + if _, ok := repo.LookupBlobSize(id, t); !ok { continue } diff --git a/cmd/restic/cmd_copy.go b/cmd/restic/cmd_copy.go index 26b16a374..0df899321 100644 --- a/cmd/restic/cmd_copy.go +++ b/cmd/restic/cmd_copy.go @@ -202,7 +202,7 @@ func copyTree(ctx context.Context, srcRepo restic.Repository, dstRepo restic.Rep // Do we already have this tree blob? treeHandle := restic.BlobHandle{ID: tree.ID, Type: restic.TreeBlob} - if !dstRepo.HasBlob(treeHandle) { + if _, ok := dstRepo.LookupBlobSize(treeHandle.ID, treeHandle.Type); !ok { // copy raw tree bytes to avoid problems if the serialization changes enqueue(treeHandle) } @@ -212,7 +212,7 @@ func copyTree(ctx context.Context, srcRepo restic.Repository, dstRepo restic.Rep // Copy the blobs for this file. for _, blobID := range entry.Content { h := restic.BlobHandle{Type: restic.DataBlob, ID: blobID} - if !dstRepo.HasBlob(h) { + if _, ok := dstRepo.LookupBlobSize(h.ID, h.Type); !ok { enqueue(h) } } diff --git a/internal/archiver/archiver.go b/internal/archiver/archiver.go index 10034afa1..1de28082b 100644 --- a/internal/archiver/archiver.go +++ b/internal/archiver/archiver.go @@ -276,7 +276,7 @@ func (arch *Archiver) loadSubtree(ctx context.Context, node *restic.Node) (*rest } func (arch *Archiver) wrapLoadTreeError(id restic.ID, err error) error { - if arch.Repo.HasBlob(restic.BlobHandle{ID: id, Type: restic.TreeBlob}) { + if _, ok := arch.Repo.LookupBlobSize(id, restic.TreeBlob); ok { err = errors.Errorf("tree %v could not be loaded; the repository could be damaged: %v", id, err) } else { err = errors.Errorf("tree %v is not known; the repository could be damaged, run `repair index` to try to repair it", id) @@ -390,7 +390,7 @@ func (fn *FutureNode) take(ctx context.Context) futureNodeResult { func (arch *Archiver) allBlobsPresent(previous *restic.Node) bool { // check if all blobs are contained in index for _, id := range previous.Content { - if !arch.Repo.HasBlob(restic.BlobHandle{ID: id, Type: restic.DataBlob}) { + if _, ok := arch.Repo.LookupBlobSize(id, restic.DataBlob); !ok { return false } } diff --git a/internal/repository/repository.go b/internal/repository/repository.go index 48bb9a0ad..e5983ee16 100644 --- a/internal/repository/repository.go +++ b/internal/repository/repository.go @@ -578,10 +578,6 @@ func (r *Repository) Connections() uint { return r.be.Connections() } -func (r *Repository) HasBlob(bh restic.BlobHandle) bool { - return r.idx.Has(bh) -} - func (r *Repository) LookupBlob(bh restic.BlobHandle) []restic.PackedBlob { return r.idx.Lookup(bh) } diff --git a/internal/restic/repository.go b/internal/restic/repository.go index 06344a630..d16c12018 100644 --- a/internal/restic/repository.go +++ b/internal/restic/repository.go @@ -25,7 +25,6 @@ type Repository interface { SetIndex(MasterIndex) error SaveIndex(ctx context.Context, excludePacks IDSet, extraObsolete IDs, opts MasterIndexSaveOpts) error - HasBlob(BlobHandle) bool LookupBlob(BlobHandle) []PackedBlob LookupBlobSize(ID, BlobType) (uint, bool)