MCPcopy
hub / github.com/kopia/kopia / syncCopyBlob

Method syncCopyBlob

cli/command_repository_sync.go:306–342  ·  view source on GitHub ↗
(ctx context.Context, m blob.Metadata, src blob.Reader, dst blob.Storage)

Source from the content-addressed store, hash-verified

304}
305
306func (c *commandRepositorySyncTo) syncCopyBlob(ctx context.Context, m blob.Metadata, src blob.Reader, dst blob.Storage) error {
307 var data gather.WriteBuffer
308 defer data.Close()
309
310 if err := src.GetBlob(ctx, m.BlobID, 0, -1, &data); err != nil {
311 if errors.Is(err, blob.ErrBlobNotFound) {
312 log(ctx).Infof("ignoring BLOB not found: %v", m.BlobID)
313 return nil
314 }
315
316 return errors.Wrapf(err, "error reading blob '%v' from source", m.BlobID)
317 }
318
319 opt := blob.PutOptions{}
320 if c.repositorySyncTimes {
321 opt.SetModTime = m.Timestamp
322 }
323
324 if err := dst.PutBlob(ctx, m.BlobID, data.Bytes(), opt); err != nil {
325 if errors.Is(err, blob.ErrSetTimeUnsupported) {
326 // run again without SetModTime, emit a warning
327 opt.SetModTime = time.Time{}
328
329 log(ctx).Warn("destination repository does not support preserving modification times")
330
331 c.repositorySyncTimes = false
332
333 err = dst.PutBlob(ctx, m.BlobID, data.Bytes(), opt)
334 }
335
336 if err != nil {
337 return errors.Wrapf(err, "error writing blob '%v' to destination", m.BlobID)
338 }
339 }
340
341 return nil
342}
343
344func syncDeleteBlob(ctx context.Context, m blob.Metadata, dst blob.Storage) error {
345 err := dst.DeleteBlob(ctx, m.BlobID)

Callers 1

runSyncBlobsMethod · 0.95

Calls 4

CloseMethod · 0.95
BytesMethod · 0.95
GetBlobMethod · 0.65
PutBlobMethod · 0.65

Tested by

no test coverage detected