diff --git a/src/cmds/restic/testdata/small-repo.tar.gz b/src/cmds/restic/testdata/small-repo.tar.gz index 83959f539..92ce87962 100644 Binary files a/src/cmds/restic/testdata/small-repo.tar.gz and b/src/cmds/restic/testdata/small-repo.tar.gz differ diff --git a/src/restic/backend/layout_default.go b/src/restic/backend/layout_default.go index 9b57657b5..daedb610d 100644 --- a/src/restic/backend/layout_default.go +++ b/src/restic/backend/layout_default.go @@ -1,6 +1,9 @@ package backend -import "restic" +import ( + "encoding/hex" + "restic" +) // DefaultLayout implements the default layout for local and sftp backends, as // described in the Design document. The `data` directory has one level of @@ -49,11 +52,18 @@ func (l *DefaultLayout) Filename(h restic.Handle) string { return l.Join(l.Dirname(h), name) } -// Paths returns all directory names +// Paths returns all directory names needed for a repo. func (l *DefaultLayout) Paths() (dirs []string) { for _, p := range defaultLayoutPaths { dirs = append(dirs, l.Join(l.Path, p)) } + + // also add subdirs + for i := 0; i < 256; i++ { + subdir := hex.EncodeToString([]byte{byte(i)}) + dirs = append(dirs, l.Join(l.Path, defaultLayoutPaths[restic.DataFile], subdir)) + } + return dirs } diff --git a/src/restic/backend/layout_test.go b/src/restic/backend/layout_test.go index 48bc2a3db..ff6378299 100644 --- a/src/restic/backend/layout_test.go +++ b/src/restic/backend/layout_test.go @@ -111,6 +111,10 @@ func TestDefaultLayout(t *testing.T) { filepath.Join(tempdir, "keys"), } + for i := 0; i < 256; i++ { + want = append(want, filepath.Join(tempdir, "data", fmt.Sprintf("%02x", i))) + } + sort.Sort(sort.StringSlice(want)) sort.Sort(sort.StringSlice(dirs))