diff --git a/addons/document/nodes.py b/addons/document/nodes.py index 594f200152b..f1ac35c333c 100644 --- a/addons/document/nodes.py +++ b/addons/document/nodes.py @@ -615,8 +615,6 @@ class node_dir(node_database): raise IOError(errno.EPERM, "Cannot move the root directory!") self.parent = self.context.get_dir_node(cr, dbro.parent_id.id) assert self.parent - - # TODO: test if parent is writable. if self.parent != ndir_node: logger.debug('Cannot move dir %r from %r to %r', self, self.parent, ndir_node) @@ -624,6 +622,8 @@ class node_dir(node_database): ret = {} if new_name and (new_name != dbro.name): + if ndir_node.child(cr, new_name): + raise IOError(errno.EEXIST, "Destination path already exists") ret['name'] = new_name del dbro diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py index 9b0f5b562e4..2ddfcc2bb7d 100644 --- a/addons/document_ftp/ftpserver/abstracted_fs.py +++ b/addons/document_ftp/ftpserver/abstracted_fs.py @@ -403,7 +403,9 @@ class abstracted_fs(object): # API shouldn't wait for us to write the object assert (ret is True) or (ret is False) cr.commit() - except Exception,err: + except EnvironmentError: + raise + except Exception, err: self._log.exception('Cannot rename "%s" to "%s" at "%s"', src, datacr[2], datacr[1]) raise OSError(1,'Operation not permited.') diff --git a/addons/document_ftp/ftpserver/ftpserver.py b/addons/document_ftp/ftpserver/ftpserver.py index 88e48bf31bf..692abc4aef4 100644 --- a/addons/document_ftp/ftpserver/ftpserver.py +++ b/addons/document_ftp/ftpserver/ftpserver.py @@ -1464,6 +1464,7 @@ class FTPHandler(asynchat.async_chat): errno.EINVAL: 504, errno.ENOENT: 550, errno.EREMOTE: 450, + errno.EEXIST: 521, } # mlsx facts attributes