diff --git a/internal/backend/azure/azure.go b/internal/backend/azure/azure.go index 7f3539f07..e6dc226cb 100644 --- a/internal/backend/azure/azure.go +++ b/internal/backend/azure/azure.go @@ -13,6 +13,7 @@ import ( "strings" "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/sema" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/errors" @@ -30,7 +31,7 @@ type Backend struct { sem sema.Semaphore prefix string listMaxItems int - backend.Layout + layout.Layout } const defaultListMaxItems = 5000 @@ -85,7 +86,7 @@ func open(cfg Config, rt http.RoundTripper) (*Backend, error) { connections: cfg.Connections, sem: sem, prefix: cfg.Prefix, - Layout: &backend.DefaultLayout{ + Layout: &layout.DefaultLayout{ Path: cfg.Prefix, Join: path.Join, }, diff --git a/internal/backend/b2/b2.go b/internal/backend/b2/b2.go index 4a6c79abb..b95506856 100644 --- a/internal/backend/b2/b2.go +++ b/internal/backend/b2/b2.go @@ -10,6 +10,7 @@ import ( "time" "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/sema" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/errors" @@ -25,7 +26,7 @@ type b2Backend struct { bucket *b2.Bucket cfg Config listMaxItems int - backend.Layout + layout.Layout sem sema.Semaphore } @@ -97,7 +98,7 @@ func Open(ctx context.Context, cfg Config, rt http.RoundTripper) (restic.Backend client: client, bucket: bucket, cfg: cfg, - Layout: &backend.DefaultLayout{ + Layout: &layout.DefaultLayout{ Join: path.Join, Path: cfg.Prefix, }, @@ -138,7 +139,7 @@ func Create(ctx context.Context, cfg Config, rt http.RoundTripper) (restic.Backe client: client, bucket: bucket, cfg: cfg, - Layout: &backend.DefaultLayout{ + Layout: &layout.DefaultLayout{ Join: path.Join, Path: cfg.Prefix, }, diff --git a/internal/backend/gs/gs.go b/internal/backend/gs/gs.go index 8ffc96af8..f4e4a350b 100644 --- a/internal/backend/gs/gs.go +++ b/internal/backend/gs/gs.go @@ -14,6 +14,7 @@ import ( "cloud.google.com/go/storage" "github.com/pkg/errors" "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/sema" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/restic" @@ -41,7 +42,7 @@ type Backend struct { bucket *storage.BucketHandle prefix string listMaxItems int - backend.Layout + layout.Layout } // Ensure that *Backend implements restic.Backend. @@ -111,7 +112,7 @@ func open(cfg Config, rt http.RoundTripper) (*Backend, error) { bucketName: cfg.Bucket, bucket: gcsClient.Bucket(cfg.Bucket), prefix: cfg.Prefix, - Layout: &backend.DefaultLayout{ + Layout: &layout.DefaultLayout{ Path: cfg.Prefix, Join: path.Join, }, diff --git a/internal/backend/layout.go b/internal/backend/layout/layout.go similarity index 99% rename from internal/backend/layout.go rename to internal/backend/layout/layout.go index 421e85e8e..14fb8dcdc 100644 --- a/internal/backend/layout.go +++ b/internal/backend/layout/layout.go @@ -1,4 +1,4 @@ -package backend +package layout import ( "context" diff --git a/internal/backend/layout_default.go b/internal/backend/layout/layout_default.go similarity index 99% rename from internal/backend/layout_default.go rename to internal/backend/layout/layout_default.go index 3bc3087ed..17c250e8f 100644 --- a/internal/backend/layout_default.go +++ b/internal/backend/layout/layout_default.go @@ -1,4 +1,4 @@ -package backend +package layout import ( "encoding/hex" diff --git a/internal/backend/layout_rest.go b/internal/backend/layout/layout_rest.go similarity index 98% rename from internal/backend/layout_rest.go rename to internal/backend/layout/layout_rest.go index 1d65828a8..2aa869995 100644 --- a/internal/backend/layout_rest.go +++ b/internal/backend/layout/layout_rest.go @@ -1,4 +1,4 @@ -package backend +package layout import "github.com/restic/restic/internal/restic" diff --git a/internal/backend/layout_s3legacy.go b/internal/backend/layout/layout_s3legacy.go similarity index 99% rename from internal/backend/layout_s3legacy.go rename to internal/backend/layout/layout_s3legacy.go index f83355860..ac88e77ad 100644 --- a/internal/backend/layout_s3legacy.go +++ b/internal/backend/layout/layout_s3legacy.go @@ -1,4 +1,4 @@ -package backend +package layout import "github.com/restic/restic/internal/restic" diff --git a/internal/backend/layout_test.go b/internal/backend/layout/layout_test.go similarity index 95% rename from internal/backend/layout_test.go rename to internal/backend/layout/layout_test.go index d319a0b2d..554f8a418 100644 --- a/internal/backend/layout_test.go +++ b/internal/backend/layout/layout_test.go @@ -1,4 +1,4 @@ -package backend +package layout import ( "context" @@ -362,15 +362,15 @@ func TestDetectLayout(t *testing.T) { filename string want string }{ - {"repo-layout-default.tar.gz", "*backend.DefaultLayout"}, - {"repo-layout-s3legacy.tar.gz", "*backend.S3LegacyLayout"}, + {"repo-layout-default.tar.gz", "*layout.DefaultLayout"}, + {"repo-layout-s3legacy.tar.gz", "*layout.S3LegacyLayout"}, } var fs = &LocalFilesystem{} for _, test := range tests { for _, fs := range []Filesystem{fs, nil} { t.Run(fmt.Sprintf("%v/fs-%T", test.filename, fs), func(t *testing.T) { - rtest.SetupTarTestFixture(t, path, filepath.Join("testdata", test.filename)) + rtest.SetupTarTestFixture(t, path, filepath.Join("../testdata", test.filename)) layout, err := DetectLayout(context.TODO(), fs, filepath.Join(path, "repo")) if err != nil { @@ -401,12 +401,12 @@ func TestParseLayout(t *testing.T) { defaultLayoutName string want string }{ - {"default", "", "*backend.DefaultLayout"}, - {"s3legacy", "", "*backend.S3LegacyLayout"}, - {"", "", "*backend.DefaultLayout"}, + {"default", "", "*layout.DefaultLayout"}, + {"s3legacy", "", "*layout.S3LegacyLayout"}, + {"", "", "*layout.DefaultLayout"}, } - rtest.SetupTarTestFixture(t, path, filepath.Join("testdata", "repo-layout-default.tar.gz")) + rtest.SetupTarTestFixture(t, path, filepath.Join("..", "testdata", "repo-layout-default.tar.gz")) for _, test := range tests { t.Run(test.layoutName, func(t *testing.T) { diff --git a/internal/backend/local/local.go b/internal/backend/local/local.go index bb644c949..bce83d768 100644 --- a/internal/backend/local/local.go +++ b/internal/backend/local/local.go @@ -10,6 +10,7 @@ import ( "syscall" "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/sema" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/errors" @@ -23,7 +24,7 @@ import ( type Local struct { Config sem sema.Semaphore - backend.Layout + layout.Layout backend.Modes } @@ -33,7 +34,7 @@ var _ restic.Backend = &Local{} const defaultLayout = "default" func open(ctx context.Context, cfg Config) (*Local, error) { - l, err := backend.ParseLayout(ctx, &backend.LocalFilesystem{}, cfg.Layout, defaultLayout, cfg.Path) + l, err := layout.ParseLayout(ctx, &layout.LocalFilesystem{}, cfg.Layout, defaultLayout, cfg.Path) if err != nil { return nil, err } diff --git a/internal/backend/rest/rest.go b/internal/backend/rest/rest.go index 6444e8655..3431fd681 100644 --- a/internal/backend/rest/rest.go +++ b/internal/backend/rest/rest.go @@ -14,7 +14,7 @@ import ( "strconv" "strings" - "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/sema" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/errors" @@ -32,7 +32,7 @@ type Backend struct { connections uint sem sema.Semaphore client http.Client - backend.Layout + layout.Layout } // the REST API protocol version is decided by HTTP request headers, these are the constants. @@ -57,7 +57,7 @@ func Open(cfg Config, rt http.RoundTripper) (*Backend, error) { be := &Backend{ url: cfg.URL, client: http.Client{Transport: rt}, - Layout: &backend.RESTLayout{URL: url, Join: path.Join}, + Layout: &layout.RESTLayout{URL: url, Join: path.Join}, connections: cfg.Connections, sem: sem, } diff --git a/internal/backend/s3/s3.go b/internal/backend/s3/s3.go index 0b3816c06..32a175676 100644 --- a/internal/backend/s3/s3.go +++ b/internal/backend/s3/s3.go @@ -13,6 +13,7 @@ import ( "time" "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/sema" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/errors" @@ -28,7 +29,7 @@ type Backend struct { client *minio.Client sem sema.Semaphore cfg Config - backend.Layout + layout.Layout } // make sure that *Backend implements backend.Backend @@ -113,7 +114,7 @@ func open(ctx context.Context, cfg Config, rt http.RoundTripper) (*Backend, erro cfg: cfg, } - l, err := backend.ParseLayout(ctx, be, cfg.Layout, defaultLayout, cfg.Prefix) + l, err := layout.ParseLayout(ctx, be, cfg.Layout, defaultLayout, cfg.Prefix) if err != nil { return nil, err } @@ -514,7 +515,7 @@ func (be *Backend) Delete(ctx context.Context) error { func (be *Backend) Close() error { return nil } // Rename moves a file based on the new layout l. -func (be *Backend) Rename(ctx context.Context, h restic.Handle, l backend.Layout) error { +func (be *Backend) Rename(ctx context.Context, h restic.Handle, l layout.Layout) error { debug.Log("Rename %v to %v", h, l) oldname := be.Filename(h) newname := l.Filename(h) diff --git a/internal/backend/sftp/sftp.go b/internal/backend/sftp/sftp.go index f6e82a402..deebb6e7c 100644 --- a/internal/backend/sftp/sftp.go +++ b/internal/backend/sftp/sftp.go @@ -14,6 +14,7 @@ import ( "time" "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/sema" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/errors" @@ -35,7 +36,7 @@ type SFTP struct { posixRename bool sem sema.Semaphore - backend.Layout + layout.Layout Config backend.Modes } @@ -144,7 +145,7 @@ func open(ctx context.Context, sftp *SFTP, cfg Config) (*SFTP, error) { return nil, err } - sftp.Layout, err = backend.ParseLayout(ctx, sftp, cfg.Layout, defaultLayout, cfg.Path) + sftp.Layout, err = layout.ParseLayout(ctx, sftp, cfg.Layout, defaultLayout, cfg.Path) if err != nil { return nil, err } @@ -243,7 +244,7 @@ func Create(ctx context.Context, cfg Config) (*SFTP, error) { return nil, err } - sftp.Layout, err = backend.ParseLayout(ctx, sftp, cfg.Layout, defaultLayout, cfg.Path) + sftp.Layout, err = layout.ParseLayout(ctx, sftp, cfg.Layout, defaultLayout, cfg.Path) if err != nil { return nil, err } diff --git a/internal/backend/swift/swift.go b/internal/backend/swift/swift.go index a739b2c6b..f97724ee4 100644 --- a/internal/backend/swift/swift.go +++ b/internal/backend/swift/swift.go @@ -14,6 +14,7 @@ import ( "time" "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/sema" "github.com/restic/restic/internal/debug" "github.com/restic/restic/internal/errors" @@ -30,7 +31,7 @@ type beSwift struct { sem sema.Semaphore container string // Container name prefix string // Prefix of object names in the container - backend.Layout + layout.Layout } // ensure statically that *beSwift implements restic.Backend. @@ -74,7 +75,7 @@ func Open(ctx context.Context, cfg Config, rt http.RoundTripper) (restic.Backend sem: sem, container: cfg.Container, prefix: cfg.Prefix, - Layout: &backend.DefaultLayout{ + Layout: &layout.DefaultLayout{ Path: cfg.Prefix, Join: path.Join, }, diff --git a/internal/migrations/s3_layout.go b/internal/migrations/s3_layout.go index be11733db..d42b94bf8 100644 --- a/internal/migrations/s3_layout.go +++ b/internal/migrations/s3_layout.go @@ -6,7 +6,7 @@ import ( "os" "path" - "github.com/restic/restic/internal/backend" + "github.com/restic/restic/internal/backend/layout" "github.com/restic/restic/internal/backend/s3" "github.com/restic/restic/internal/cache" "github.com/restic/restic/internal/debug" @@ -74,7 +74,7 @@ func retry(max int, fail func(err error), f func() error) error { // maxErrors for retrying renames on s3. const maxErrors = 20 -func (m *S3Layout) moveFiles(ctx context.Context, be *s3.Backend, l backend.Layout, t restic.FileType) error { +func (m *S3Layout) moveFiles(ctx context.Context, be *s3.Backend, l layout.Layout, t restic.FileType) error { printErr := func(err error) { fmt.Fprintf(os.Stderr, "renaming file returned error: %v\n", err) } @@ -97,12 +97,12 @@ func (m *S3Layout) Apply(ctx context.Context, repo restic.Repository) error { return errors.New("backend is not s3") } - oldLayout := &backend.S3LegacyLayout{ + oldLayout := &layout.S3LegacyLayout{ Path: be.Path(), Join: path.Join, } - newLayout := &backend.DefaultLayout{ + newLayout := &layout.DefaultLayout{ Path: be.Path(), Join: path.Join, }