forked from TrueCloudLab/restic
Fix layout detection
This commit is contained in:
parent
50dfa64a54
commit
f7c4b3a922
2 changed files with 24 additions and 10 deletions
|
@ -6,6 +6,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"restic"
|
"restic"
|
||||||
|
"restic/debug"
|
||||||
"restic/errors"
|
"restic/errors"
|
||||||
"restic/fs"
|
"restic/fs"
|
||||||
)
|
)
|
||||||
|
@ -140,28 +141,36 @@ func DetectLayout(repo Filesystem, dir string) (Layout, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if foundKeysFile && foundDataFile && !foundKeyFile && !foundDataSubdirFile {
|
if foundKeysFile && foundDataFile && !foundKeyFile && !foundDataSubdirFile {
|
||||||
return &CloudLayout{}, nil
|
debug.Log("found cloud layout at %v", dir)
|
||||||
|
return &CloudLayout{
|
||||||
|
Path: dir,
|
||||||
|
Join: repo.Join,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if foundKeysFile && foundDataSubdirFile && !foundKeyFile && !foundDataFile {
|
if foundKeysFile && foundDataSubdirFile && !foundKeyFile && !foundDataFile {
|
||||||
return &DefaultLayout{}, nil
|
debug.Log("found default layout at %v", dir)
|
||||||
|
return &DefaultLayout{
|
||||||
|
Path: dir,
|
||||||
|
Join: repo.Join,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if foundKeyFile && foundDataFile && !foundKeysFile && !foundDataSubdirFile {
|
if foundKeyFile && foundDataFile && !foundKeysFile && !foundDataSubdirFile {
|
||||||
return &S3Layout{}, nil
|
debug.Log("found s3 layout at %v", dir)
|
||||||
|
return &S3Layout{
|
||||||
|
Path: dir,
|
||||||
|
Join: repo.Join,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.New("auto-detecting the filesystem layout failed")
|
return nil, errors.New("auto-detecting the filesystem layout failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseLayout parses the config string and returns a Layout. When layout is
|
// ParseLayout parses the config string and returns a Layout. When layout is
|
||||||
// the empty string, DetectLayout is used. If repo is nil, an instance of LocalFilesystem
|
// the empty string, DetectLayout is used.
|
||||||
// is used.
|
|
||||||
func ParseLayout(repo Filesystem, layout, path string) (l Layout, err error) {
|
func ParseLayout(repo Filesystem, layout, path string) (l Layout, err error) {
|
||||||
if repo == nil {
|
debug.Log("parse layout string %q for backend at %v", layout, path)
|
||||||
repo = &LocalFilesystem{}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch layout {
|
switch layout {
|
||||||
case "default":
|
case "default":
|
||||||
l = &DefaultLayout{
|
l = &DefaultLayout{
|
||||||
|
|
|
@ -271,7 +271,7 @@ func TestParseLayout(t *testing.T) {
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.layoutName, func(t *testing.T) {
|
t.Run(test.layoutName, func(t *testing.T) {
|
||||||
layout, err := ParseLayout(nil, test.layoutName, filepath.Join(path, "repo"))
|
layout, err := ParseLayout(&LocalFilesystem{}, test.layoutName, filepath.Join(path, "repo"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -280,6 +280,11 @@ func TestParseLayout(t *testing.T) {
|
||||||
t.Fatal("wanted some layout, but detect returned nil")
|
t.Fatal("wanted some layout, but detect returned nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test that the functions work (and don't panic)
|
||||||
|
_ = layout.Dirname(restic.Handle{Type: restic.DataFile})
|
||||||
|
_ = layout.Filename(restic.Handle{Type: restic.DataFile, Name: "1234"})
|
||||||
|
_ = layout.Paths()
|
||||||
|
|
||||||
layoutName := fmt.Sprintf("%T", layout)
|
layoutName := fmt.Sprintf("%T", layout)
|
||||||
if layoutName != test.want {
|
if layoutName != test.want {
|
||||||
t.Fatalf("want layout %v, got %v", test.want, layoutName)
|
t.Fatalf("want layout %v, got %v", test.want, layoutName)
|
||||||
|
|
Loading…
Reference in a new issue