From 8de6e5a627fb5e491bf1bb329e1ab7e8add26e88 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 15 Aug 2016 21:10:12 +0200 Subject: [PATCH] Add progress option to index --- src/restic/index/index.go | 15 +++++++++++++-- src/restic/index/index_test.go | 14 +++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/restic/index/index.go b/src/restic/index/index.go index 887e1234a..0d2d70397 100644 --- a/src/restic/index/index.go +++ b/src/restic/index/index.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "os" + "restic" "restic/backend" "restic/debug" "restic/list" @@ -41,16 +42,21 @@ func newIndex() *Index { } // New creates a new index for repo from scratch. -func New(repo types.Repository) (*Index, error) { +func New(repo types.Repository, p *restic.Progress) (*Index, error) { done := make(chan struct{}) defer close(done) + p.Start() + defer p.Done() + ch := make(chan worker.Job) go list.AllPacks(repo, ch, done) idx := newIndex() for job := range ch { + p.Report(restic.Stat{Blobs: 1}) + packID := job.Data.(backend.ID) if job.Error != nil { fmt.Fprintf(os.Stderr, "unable to list pack %v: %v\n", packID.Str(), job.Error) @@ -105,9 +111,12 @@ func loadIndexJSON(repo types.Repository, id backend.ID) (*indexJSON, error) { } // Load creates an index by loading all index files from the repo. -func Load(repo types.Repository) (*Index, error) { +func Load(repo types.Repository, p *restic.Progress) (*Index, error) { debug.Log("index.Load", "loading indexes") + p.Start() + defer p.Done() + done := make(chan struct{}) defer close(done) @@ -117,6 +126,8 @@ func Load(repo types.Repository) (*Index, error) { index := newIndex() for id := range repo.List(backend.Index, done) { + p.Report(restic.Stat{Blobs: 1}) + debug.Log("index.Load", "Load index %v", id.Str()) idx, err := loadIndexJSON(repo, id) if err != nil { diff --git a/src/restic/index/index_test.go b/src/restic/index/index_test.go index 580fffccb..c950608ab 100644 --- a/src/restic/index/index_test.go +++ b/src/restic/index/index_test.go @@ -40,7 +40,7 @@ func TestIndexNew(t *testing.T) { repo, cleanup := createFilledRepo(t, 3, 0) defer cleanup() - idx, err := New(repo) + idx, err := New(repo, nil) if err != nil { t.Fatalf("New() returned error %v", err) } @@ -56,7 +56,7 @@ func TestIndexLoad(t *testing.T) { repo, cleanup := createFilledRepo(t, 3, 0) defer cleanup() - loadIdx, err := Load(repo) + loadIdx, err := Load(repo, nil) if err != nil { t.Fatalf("Load() returned error %v", err) } @@ -67,7 +67,7 @@ func TestIndexLoad(t *testing.T) { validateIndex(t, repo, loadIdx) - newIdx, err := New(repo) + newIdx, err := New(repo, nil) if err != nil { t.Fatalf("New() returned error %v", err) } @@ -146,7 +146,7 @@ func BenchmarkIndexNew(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - idx, err := New(repo) + idx, err := New(repo, nil) if err != nil { b.Fatalf("New() returned error %v", err) @@ -162,7 +162,7 @@ func TestIndexDuplicateBlobs(t *testing.T) { repo, cleanup := createFilledRepo(t, 3, 0.01) defer cleanup() - idx, err := New(repo) + idx, err := New(repo, nil) if err != nil { t.Fatal(err) } @@ -181,7 +181,7 @@ func TestIndexDuplicateBlobs(t *testing.T) { } func loadIndex(t testing.TB, repo *repository.Repository) *Index { - idx, err := Load(repo) + idx, err := Load(repo, nil) if err != nil { t.Fatalf("Load() returned error %v", err) } @@ -243,7 +243,7 @@ func TestIndexAddRemovePack(t *testing.T) { repo, cleanup := createFilledRepo(t, 3, 0) defer cleanup() - idx, err := Load(repo) + idx, err := Load(repo, nil) if err != nil { t.Fatalf("Load() returned error %v", err) }