diff --git a/changelog/unreleased/pull-5319 b/changelog/unreleased/pull-5319 new file mode 100644 index 000000000..ae1e5fdf1 --- /dev/null +++ b/changelog/unreleased/pull-5319 @@ -0,0 +1,9 @@ +Enhancement: add more status counters to `restic copy` + +`restic copy` now produces more status counters in text format. The new counters +are the number of blobs to copy, their size on disk and the number of packfiles +used from the source repository. The additional statistics is only produced when +the `--verbose` option is specified. + +https://github.com/restic/restic/issues/5175 +https://github.com/restic/restic/pull/5319 diff --git a/cmd/restic/cmd_copy.go b/cmd/restic/cmd_copy.go index 096ce76c6..498d6f75d 100644 --- a/cmd/restic/cmd_copy.go +++ b/cmd/restic/cmd_copy.go @@ -242,6 +242,7 @@ func copyTree(ctx context.Context, srcRepo restic.Repository, dstRepo restic.Rep return err } + copyStats(srcRepo, copyBlobs, packList, printer) bar := printer.NewCounter("packs copied") err = repository.Repack(ctx, srcRepo, dstRepo, packList, copyBlobs, bar, printer.P) if err != nil { @@ -249,3 +250,21 @@ func copyTree(ctx context.Context, srcRepo restic.Repository, dstRepo restic.Rep } return nil } + +// copyStats: print statistics for the blobs to be copied +func copyStats(srcRepo restic.Repository, copyBlobs restic.BlobSet, packList restic.IDSet, printer progress.Printer) { + + // count and size + countBlobs := 0 + sizeBlobs := uint64(0) + for blob := range copyBlobs { + for _, blob := range srcRepo.LookupBlob(blob.Type, blob.ID) { + countBlobs++ + sizeBlobs += uint64(blob.Length) + break + } + } + + printer.V(" copy %d blobs with disk size %s in %d packfiles\n", + countBlobs, ui.FormatBytes(uint64(sizeBlobs)), len(packList)) +}