From 792b81725e46d9799f11386d904af869b2ec7689 Mon Sep 17 00:00:00 2001 From: Pauline Middelink Date: Sat, 4 Mar 2017 17:38:34 +0100 Subject: [PATCH 1/2] Add progressbar to repack and blob remove phases of prune cmd. --- src/cmds/restic/cmd_prune.go | 27 +++++++++++++++++++-------- src/restic/repository/repack.go | 5 ++++- src/restic/repository/repack_test.go | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/cmds/restic/cmd_prune.go b/src/cmds/restic/cmd_prune.go index 1922f35ce..64ee09d6c 100644 --- a/src/cmds/restic/cmd_prune.go +++ b/src/cmds/restic/cmd_prune.go @@ -217,17 +217,28 @@ func pruneRepository(gopts GlobalOptions, repo restic.Repository) error { Verbosef("will delete %d packs and rewrite %d packs, this frees %s\n", len(removePacks), len(rewritePacks), formatBytes(uint64(removeBytes))) - err = repository.Repack(repo, rewritePacks, usedBlobs) - if err != nil { - return err + if len(rewritePacks) != 0 { + bar = newProgressMax(!gopts.Quiet, uint64(len(rewritePacks)), "packs rewriten") + bar.Start() + err = repository.Repack(repo, rewritePacks, usedBlobs, bar) + if err != nil { + return err + } + bar.Done() } - for packID := range removePacks { - h := restic.Handle{Type: restic.DataFile, Name: packID.String()} - err = repo.Backend().Remove(h) - if err != nil { - Warnf("unable to remove file %v from the repository\n", packID.Str()) + if len(removePacks) != 0 { + bar = newProgressMax(!gopts.Quiet, uint64(len(removePacks)), "packs deleted") + bar.Start() + for packID := range removePacks { + h := restic.Handle{Type: restic.DataFile, Name: packID.String()} + err = repo.Backend().Remove(h) + if err != nil { + Warnf("unable to remove file %v from the repository\n", packID.Str()) + } + bar.Report(restic.Stat{Blobs: 1}) } + bar.Done() } Verbosef("creating new index\n") diff --git a/src/restic/repository/repack.go b/src/restic/repository/repack.go index d0923cc75..7cd1c5fed 100644 --- a/src/restic/repository/repack.go +++ b/src/restic/repository/repack.go @@ -18,7 +18,7 @@ import ( // these packs. Each pack is loaded and the blobs listed in keepBlobs is saved // into a new pack. Afterwards, the packs are removed. This operation requires // an exclusive lock on the repo. -func Repack(repo restic.Repository, packs restic.IDSet, keepBlobs restic.BlobSet) (err error) { +func Repack(repo restic.Repository, packs restic.IDSet, keepBlobs restic.BlobSet, p *restic.Progress) (err error) { debug.Log("repacking %d packs while keeping %d blobs", len(packs), len(keepBlobs)) for packID := range packs { @@ -118,6 +118,9 @@ func Repack(repo restic.Repository, packs restic.IDSet, keepBlobs restic.BlobSet if err = os.Remove(tempfile.Name()); err != nil { return errors.Wrap(err, "Remove") } + if p != nil { + p.Report(restic.Stat{Blobs: 1}) + } } if err := repo.Flush(); err != nil { diff --git a/src/restic/repository/repack_test.go b/src/restic/repository/repack_test.go index 619454336..622b3ba52 100644 --- a/src/restic/repository/repack_test.go +++ b/src/restic/repository/repack_test.go @@ -132,7 +132,7 @@ func findPacksForBlobs(t *testing.T, repo restic.Repository, blobs restic.BlobSe } func repack(t *testing.T, repo restic.Repository, packs restic.IDSet, blobs restic.BlobSet) { - err := repository.Repack(repo, packs, blobs) + err := repository.Repack(repo, packs, blobs, nil) if err != nil { t.Fatal(err) } From 5564c78e53cc054d5c541484c32ca74a269e17dd Mon Sep 17 00:00:00 2001 From: Pauline Middelink Date: Sat, 4 Mar 2017 17:43:58 +0100 Subject: [PATCH 2/2] English typo: rewriten > rewritten. --- src/cmds/restic/cmd_prune.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmds/restic/cmd_prune.go b/src/cmds/restic/cmd_prune.go index 64ee09d6c..ecab8196c 100644 --- a/src/cmds/restic/cmd_prune.go +++ b/src/cmds/restic/cmd_prune.go @@ -218,7 +218,7 @@ func pruneRepository(gopts GlobalOptions, repo restic.Repository) error { len(removePacks), len(rewritePacks), formatBytes(uint64(removeBytes))) if len(rewritePacks) != 0 { - bar = newProgressMax(!gopts.Quiet, uint64(len(rewritePacks)), "packs rewriten") + bar = newProgressMax(!gopts.Quiet, uint64(len(rewritePacks)), "packs rewritten") bar.Start() err = repository.Repack(repo, rewritePacks, usedBlobs, bar) if err != nil {