~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/ftp.py

Merged mailine

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
active, in which case aftp:// will be your friend.
25
25
"""
26
26
 
27
 
from bzrlib.transport import Transport
28
 
 
29
 
from bzrlib.errors import (TransportNotPossible, TransportError,
30
 
                           NoSuchFile, FileExists)
31
 
 
32
 
import os, errno
33
27
from cStringIO import StringIO
 
28
import errno
34
29
import ftplib
 
30
import os
 
31
import urllib
35
32
import urlparse
36
 
import urllib
37
33
import stat
38
 
 
39
 
from bzrlib.branch import Branch
 
34
from warnings import warn
 
35
 
 
36
 
 
37
from bzrlib.transport import Transport
 
38
from bzrlib.errors import (TransportNotPossible, TransportError,
 
39
                           NoSuchFile, FileExists)
40
40
from bzrlib.trace import mutter
41
41
 
42
42
 
177
177
            ret.seek(0)
178
178
            return ret
179
179
        except ftplib.error_perm, e:
180
 
            raise NoSuchFile(self.abspath(relpath), extra=extra)
 
180
            raise NoSuchFile(self.abspath(relpath), extra=str(e))
181
181
 
182
 
    def put(self, relpath, fp):
 
182
    def put(self, relpath, fp, mode=None):
183
183
        """Copy the file-like or string object into the location.
184
184
 
185
185
        :param relpath: Location to put the contents, relative to base.
186
186
        :param f:       File-like or string object.
 
187
        TODO: jam 20051215 This should be an atomic put, not overwritting files in place
 
188
        TODO: jam 20051215 ftp as a protocol seems to support chmod, but ftplib does not
187
189
        """
188
190
        if not hasattr(fp, 'read'):
189
191
            fp = StringIO(fp)
194
196
        except ftplib.error_perm, e:
195
197
            raise TransportError(orig_error=e)
196
198
 
197
 
    def mkdir(self, relpath):
 
199
    def mkdir(self, relpath, mode=None):
198
200
        """Create a directory at the given path."""
199
201
        try:
200
202
            mutter("FTP mkd: %s" % self._abspath(relpath))
302
304
        :return: A lock object, which should be passed to Transport.unlock()
303
305
        """
304
306
        return self.lock_read(relpath)
 
307
 
 
308
 
 
309
def get_test_permutations():
 
310
    """Return the permutations to be used in testing."""
 
311
    warn("There are no FTP transport provider tests yet.")
 
312
    return []