From ae562b5a4fb59c11dcd598d7262903cb325d0d50 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Thu, 26 Apr 2018 14:53:03 +0100 Subject: [PATCH] ftp: more workarounds for FTP servers to fix mkParentDir - fixes #2181 --- backend/ftp/ftp.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/ftp/ftp.go b/backend/ftp/ftp.go index eb51bd833..a06f977f0 100644 --- a/backend/ftp/ftp.go +++ b/backend/ftp/ftp.go @@ -259,7 +259,7 @@ func translateErrorDir(err error) error { switch errX := err.(type) { case *textproto.Error: switch errX.Code { - case ftp.StatusFileUnavailable: + case ftp.StatusFileUnavailable, ftp.StatusFileActionIgnored: err = fs.ErrorDirNotFound } } @@ -296,7 +296,7 @@ func (f *Fs) NewObject(remote string) (o fs.Object, err error) { // defer fs.Trace(remote, "")("o=%v, err=%v", &o, &err) entry, err := f.findItem(remote) if err != nil { - return nil, errors.Wrap(err, "NewObject") + return nil, err } if entry != nil && entry.Type != ftp.EntryTypeFolder { o := &Object{ @@ -475,6 +475,13 @@ func (f *Fs) mkdir(abspath string) error { } err = c.MakeDir(abspath) f.putFtpConnection(&c, err) + switch errX := err.(type) { + case *textproto.Error: + switch errX.Code { + case ftp.StatusFileUnavailable: // dir already exists: see issue #2181 + err = nil + } + } return err }