From 0b50f9e02cdea5cd4472cf5a9e545af0514b86b4 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 23 Jan 2016 19:19:26 +0100 Subject: [PATCH] Move MemoryBackend to backend/mem --- .../backend_test.go} | 2 +- backend/{ => mem}/mem_backend.go | 66 +++++++------------ .../mem_backend_test.go} | 7 +- backend/readcloser.go | 21 ++++++ backend/test/tests_test.go | 3 +- checker/checker_test.go | 3 +- 6 files changed, 54 insertions(+), 48 deletions(-) rename backend/{mem_backend_test.go => mem/backend_test.go} (98%) rename backend/{ => mem}/mem_backend.go (67%) rename backend/{mem_backend_prepare_test.go => mem/mem_backend_test.go} (74%) create mode 100644 backend/readcloser.go diff --git a/backend/mem_backend_test.go b/backend/mem/backend_test.go similarity index 98% rename from backend/mem_backend_test.go rename to backend/mem/backend_test.go index 46dfd88f4..233b30f60 100644 --- a/backend/mem_backend_test.go +++ b/backend/mem/backend_test.go @@ -1,5 +1,5 @@ // DO NOT EDIT, AUTOMATICALLY GENERATED -package backend_test +package mem_test import ( "testing" diff --git a/backend/mem_backend.go b/backend/mem/mem_backend.go similarity index 67% rename from backend/mem_backend.go rename to backend/mem/mem_backend.go index e4782e40c..e231c2ede 100644 --- a/backend/mem_backend.go +++ b/backend/mem/mem_backend.go @@ -1,4 +1,4 @@ -package backend +package mem import ( "bytes" @@ -7,11 +7,12 @@ import ( "sort" "sync" + "github.com/restic/restic/backend" "github.com/restic/restic/debug" ) type entry struct { - Type Type + Type backend.Type Name string } @@ -23,37 +24,36 @@ type MemoryBackend struct { data memMap m sync.Mutex - MockBackend + backend.MockBackend } -// NewMemoryBackend returns a new backend that saves all data in a map in -// memory. -func NewMemoryBackend() *MemoryBackend { +// New returns a new backend that saves all data in a map in memory. +func New() *MemoryBackend { be := &MemoryBackend{ data: make(memMap), } - be.MockBackend.TestFn = func(t Type, name string) (bool, error) { + be.MockBackend.TestFn = func(t backend.Type, name string) (bool, error) { return memTest(be, t, name) } - be.MockBackend.CreateFn = func() (Blob, error) { + be.MockBackend.CreateFn = func() (backend.Blob, error) { return memCreate(be) } - be.MockBackend.GetReaderFn = func(t Type, name string, offset, length uint) (io.ReadCloser, error) { + be.MockBackend.GetReaderFn = func(t backend.Type, name string, offset, length uint) (io.ReadCloser, error) { return memGetReader(be, t, name, offset, length) } - be.MockBackend.LoadFn = func(h Handle, p []byte, off int64) (int, error) { + be.MockBackend.LoadFn = func(h backend.Handle, p []byte, off int64) (int, error) { return memLoad(be, h, p, off) } - be.MockBackend.RemoveFn = func(t Type, name string) error { + be.MockBackend.RemoveFn = func(t backend.Type, name string) error { return memRemove(be, t, name) } - be.MockBackend.ListFn = func(t Type, done <-chan struct{}) <-chan string { + be.MockBackend.ListFn = func(t backend.Type, done <-chan struct{}) <-chan string { return memList(be, t, done) } @@ -74,7 +74,7 @@ func NewMemoryBackend() *MemoryBackend { return be } -func (be *MemoryBackend) insert(t Type, name string, data []byte) error { +func (be *MemoryBackend) insert(t backend.Type, name string, data []byte) error { be.m.Lock() defer be.m.Unlock() @@ -86,7 +86,7 @@ func (be *MemoryBackend) insert(t Type, name string, data []byte) error { return nil } -func memTest(be *MemoryBackend, t Type, name string) (bool, error) { +func memTest(be *MemoryBackend, t backend.Type, name string) (bool, error) { be.m.Lock() defer be.m.Unlock() @@ -114,8 +114,8 @@ func (e *tempMemEntry) Size() uint { return uint(len(e.data.Bytes())) } -func (e *tempMemEntry) Finalize(t Type, name string) error { - if t == Config { +func (e *tempMemEntry) Finalize(t backend.Type, name string) error { + if t == backend.Config { name = "" } @@ -123,35 +123,17 @@ func (e *tempMemEntry) Finalize(t Type, name string) error { return e.be.insert(t, name, e.data.Bytes()) } -func memCreate(be *MemoryBackend) (Blob, error) { +func memCreate(be *MemoryBackend) (backend.Blob, error) { blob := &tempMemEntry{be: be} debug.Log("MemoryBackend.Create", "create new blob %p", blob) return blob, nil } -// ReadCloser wraps a reader and adds a noop Close method if rd does not implement io.Closer. -func ReadCloser(rd io.Reader) io.ReadCloser { - return readCloser{rd} -} - -// readCloser wraps a reader and adds a noop Close method if rd does not implement io.Closer. -type readCloser struct { - io.Reader -} - -func (rd readCloser) Close() error { - if r, ok := rd.Reader.(io.Closer); ok { - return r.Close() - } - - return nil -} - -func memGetReader(be *MemoryBackend, t Type, name string, offset, length uint) (io.ReadCloser, error) { +func memGetReader(be *MemoryBackend, t backend.Type, name string, offset, length uint) (io.ReadCloser, error) { be.m.Lock() defer be.m.Unlock() - if t == Config { + if t == backend.Config { name = "" } @@ -176,10 +158,10 @@ func memGetReader(be *MemoryBackend, t Type, name string, offset, length uint) ( buf = buf[:length] } - return readCloser{bytes.NewReader(buf)}, nil + return backend.ReadCloser(bytes.NewReader(buf)), nil } -func memLoad(be *MemoryBackend, h Handle, p []byte, off int64) (int, error) { +func memLoad(be *MemoryBackend, h backend.Handle, p []byte, off int64) (int, error) { be.m.Lock() defer be.m.Unlock() @@ -187,7 +169,7 @@ func memLoad(be *MemoryBackend, h Handle, p []byte, off int64) (int, error) { return 0, err } - if h.Type == Config { + if h.Type == backend.Config { h.Name = "" } @@ -213,7 +195,7 @@ func memLoad(be *MemoryBackend, h Handle, p []byte, off int64) (int, error) { return n, nil } -func memRemove(be *MemoryBackend, t Type, name string) error { +func memRemove(be *MemoryBackend, t backend.Type, name string) error { be.m.Lock() defer be.m.Unlock() @@ -228,7 +210,7 @@ func memRemove(be *MemoryBackend, t Type, name string) error { return nil } -func memList(be *MemoryBackend, t Type, done <-chan struct{}) <-chan string { +func memList(be *MemoryBackend, t backend.Type, done <-chan struct{}) <-chan string { be.m.Lock() defer be.m.Unlock() diff --git a/backend/mem_backend_prepare_test.go b/backend/mem/mem_backend_test.go similarity index 74% rename from backend/mem_backend_prepare_test.go rename to backend/mem/mem_backend_test.go index 8ddeaa72c..8c3745aa2 100644 --- a/backend/mem_backend_prepare_test.go +++ b/backend/mem/mem_backend_test.go @@ -1,15 +1,16 @@ -package backend_test +package mem_test import ( "errors" "github.com/restic/restic/backend" + "github.com/restic/restic/backend/mem" "github.com/restic/restic/backend/test" ) var be backend.Backend -//go:generate go run test/generate_backend_tests.go -testfile test/tests.go -output mem_backend_test.go -prefix MemBackend +//go:generate go run ../test/generate_backend_tests.go func init() { test.CreateFn = func() (backend.Backend, error) { @@ -17,7 +18,7 @@ func init() { return nil, errors.New("temporary memory backend dir already exists") } - be = backend.NewMemoryBackend() + be = mem.New() return be, nil } diff --git a/backend/readcloser.go b/backend/readcloser.go new file mode 100644 index 000000000..6467e0dfc --- /dev/null +++ b/backend/readcloser.go @@ -0,0 +1,21 @@ +package backend + +import "io" + +// ReadCloser wraps a reader and adds a noop Close method if rd does not implement io.Closer. +func ReadCloser(rd io.Reader) io.ReadCloser { + return readCloser{rd} +} + +// readCloser wraps a reader and adds a noop Close method if rd does not implement io.Closer. +type readCloser struct { + io.Reader +} + +func (rd readCloser) Close() error { + if r, ok := rd.Reader.(io.Closer); ok { + return r.Close() + } + + return nil +} diff --git a/backend/test/tests_test.go b/backend/test/tests_test.go index c901e6658..22e769745 100644 --- a/backend/test/tests_test.go +++ b/backend/test/tests_test.go @@ -4,6 +4,7 @@ import ( "errors" "github.com/restic/restic/backend" + "github.com/restic/restic/backend/mem" "github.com/restic/restic/backend/test" ) @@ -17,7 +18,7 @@ func init() { return nil, errors.New("temporary memory backend dir already exists") } - be = backend.NewMemoryBackend() + be = mem.New() return be, nil } diff --git a/checker/checker_test.go b/checker/checker_test.go index 9ce2db5ca..6118b987d 100644 --- a/checker/checker_test.go +++ b/checker/checker_test.go @@ -9,6 +9,7 @@ import ( "github.com/restic/restic" "github.com/restic/restic/backend" + "github.com/restic/restic/backend/mem" "github.com/restic/restic/checker" "github.com/restic/restic/repository" . "github.com/restic/restic/test" @@ -252,7 +253,7 @@ func (f faultReader) Read(p []byte) (int, error) { } func TestCheckerModifiedData(t *testing.T) { - be := backend.NewMemoryBackend() + be := mem.New() repo := repository.New(be) OK(t, repo.Init(TestPassword))