~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/ftp.py

Merge from mbp.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
 
27
27
from bzrlib.transport import Transport
28
28
 
29
 
from bzrlib.errors import (TransportNotPossible, NoSuchFile, 
30
 
                           NonRelativePath, TransportError, ConnectionError)
 
29
from bzrlib.errors import (TransportNotPossible, TransportError,
 
30
                           NoSuchFile, FileExists)
31
31
 
32
32
import os, errno
33
33
from cStringIO import StringIO
36
36
import urllib
37
37
import stat
38
38
 
39
 
from bzrlib.errors import BzrError, BzrCheckError
40
39
from bzrlib.branch import Branch
41
40
from bzrlib.trace import mutter
42
41
 
43
42
 
44
 
class FtpTransportError(TransportError):
45
 
    pass
46
 
 
47
 
 
48
43
class FtpStatResult(object):
49
44
    def __init__(self, f, relpath):
50
45
        try:
94
89
            self._FTP_instance.set_pasv(not self.is_active)
95
90
            return self._FTP_instance
96
91
        except ftplib.error_perm, e:
97
 
            raise FtpTransportError(msg="Error setting up connection: %s"
 
92
            raise TransportError(msg="Error setting up connection: %s"
98
93
                                    % str(e), orig_error=e)
99
94
 
100
95
    def should_cache(self):
182
177
            ret.seek(0)
183
178
            return ret
184
179
        except ftplib.error_perm, e:
185
 
            raise NoSuchFile(msg="Error retrieving %s: %s"
186
 
                             % (self.abspath(relpath), str(e)),
187
 
                             orig_error=e)
 
180
            raise NoSuchFile(self.abspath(relpath), extra=extra)
188
181
 
189
182
    def put(self, relpath, fp):
190
183
        """Copy the file-like or string object into the location.
199
192
            f = self._get_FTP()
200
193
            f.storbinary('STOR '+self._abspath(relpath), fp, 8192)
201
194
        except ftplib.error_perm, e:
202
 
            raise FtpTransportError(orig_error=e)
 
195
            raise TransportError(orig_error=e)
203
196
 
204
197
    def mkdir(self, relpath):
205
198
        """Create a directory at the given path."""
211
204
            except ftplib.error_perm, e:
212
205
                s = str(e)
213
206
                if 'File exists' in s:
214
 
                    # Swallow attempts to mkdir something which is already
215
 
                    # present. Hopefully this will shush some errors.
216
 
                    return
 
207
                    raise FileExists(self.abspath(relpath), extra=s)
217
208
                else:
218
209
                    raise
219
210
        except ftplib.error_perm, e:
220
 
            raise FtpTransportError(orig_error=e)
 
211
            raise TransportError(orig_error=e)
221
212
 
222
213
    def append(self, relpath, f):
223
214
        """Append the text in the file-like object into the final
237
228
            f = self._get_FTP()
238
229
            f.rename(self._abspath(rel_from), self._abspath(rel_to))
239
230
        except ftplib.error_perm, e:
240
 
            raise FtpTransportError(orig_error=e)
 
231
            raise TransportError(orig_error=e)
241
232
 
242
233
    def delete(self, relpath):
243
234
        """Delete the item at relpath"""
246
237
            f = self._get_FTP()
247
238
            f.delete(self._abspath(relpath))
248
239
        except ftplib.error_perm, e:
249
 
            raise FtpTransportError(orig_error=e)
 
240
            raise TransportError(orig_error=e)
250
241
 
251
242
    def listable(self):
252
243
        """See Transport.listable."""
264
255
            # Remove . and .. if present, and return
265
256
            return [path for path in stripped if path not in (".", "..")]
266
257
        except ftplib.error_perm, e:
267
 
            raise FtpTransportError(orig_error=e)
 
258
            raise TransportError(orig_error=e)
268
259
 
269
260
    def iter_files_recursive(self):
270
261
        """See Transport.iter_files_recursive.
289
280
            f = self._get_FTP()
290
281
            return FtpStatResult(f, self._abspath(relpath))
291
282
        except ftplib.error_perm, e:
292
 
            raise FtpTransportError(orig_error=e)
 
283
            raise TransportError(orig_error=e)
293
284
 
294
285
    def lock_read(self, relpath):
295
286
        """Lock the given file for shared (read) access.