diff --git a/changelog/unreleased/pull-5319 b/changelog/unreleased/pull-5319 new file mode 100644 index 000000000..e4c1f0865 --- /dev/null +++ b/changelog/unreleased/pull-5319 @@ -0,0 +1,8 @@ +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 tree/data blobs, their sizes and the number of packfiles +they are attachedc to. + +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..2281e9d05 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,19 @@ func copyTree(ctx context.Context, srcRepo restic.Repository, dstRepo restic.Rep } return nil } + +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(" %7d all blobs with a size %11s in %7d packfiles\n", + countBlobs, ui.FormatBytes(uint64(sizeBlobs)), len(packList)) +}