2
2
mirror of https://github.com/octoleo/restic.git synced 2024-11-26 14:56:29 +00:00

sftp: Use MkdirAll provided by the client

Closes #2518
This commit is contained in:
Alexander Neumann 2020-01-01 17:26:38 +01:00
parent 6ec5dc8016
commit 2cd9c7ef16

View File

@ -138,8 +138,7 @@ func Open(cfg Config) (*SFTP, error) {
func (r *SFTP) mkdirAllDataSubdirs() error { func (r *SFTP) mkdirAllDataSubdirs() error {
for _, d := range r.Paths() { for _, d := range r.Paths() {
err := r.mkdirAll(d, backend.Modes.Dir) err := r.c.MkdirAll(d)
debug.Log("mkdirAll %v -> %v", d, err)
if err != nil { if err != nil {
return err return err
} }
@ -250,38 +249,6 @@ func (r *SFTP) Location() string {
return r.p return r.p
} }
func (r *SFTP) mkdirAll(dir string, mode os.FileMode) error {
// check if directory already exists
fi, err := r.c.Lstat(dir)
if err == nil {
if fi.IsDir() {
return nil
}
return errors.Errorf("mkdirAll(%s): entry exists but is not a directory", dir)
}
// create parent directories
errMkdirAll := r.mkdirAll(path.Dir(dir), backend.Modes.Dir)
// create directory
errMkdir := r.c.Mkdir(dir)
// test if directory was created successfully
fi, err = r.c.Lstat(dir)
if err != nil {
// return previous errors
return errors.Errorf("mkdirAll(%s): unable to create directories: %v, %v", dir, errMkdirAll, errMkdir)
}
if !fi.IsDir() {
return errors.Errorf("mkdirAll(%s): entry exists but is not a directory", dir)
}
// set mode
return r.c.Chmod(dir, mode)
}
// Join joins the given paths and cleans them afterwards. This always uses // Join joins the given paths and cleans them afterwards. This always uses
// forward slashes, which is required by sftp. // forward slashes, which is required by sftp.
func Join(parts ...string) string { func Join(parts ...string) string {
@ -306,7 +273,7 @@ func (r *SFTP) Save(ctx context.Context, h restic.Handle, rd restic.RewindReader
if r.IsNotExist(err) { if r.IsNotExist(err) {
// error is caused by a missing directory, try to create it // error is caused by a missing directory, try to create it
mkdirErr := r.mkdirAll(r.Dirname(h), backend.Modes.Dir) mkdirErr := r.c.MkdirAll(r.Dirname(h))
if mkdirErr != nil { if mkdirErr != nil {
debug.Log("error creating dir %v: %v", r.Dirname(h), mkdirErr) debug.Log("error creating dir %v: %v", r.Dirname(h), mkdirErr)
} else { } else {