~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/__init__.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-02-22 07:59:56 UTC
  • mfrom: (1553.5.33 bzr.mbp.locks)
  • Revision ID: pqm@pqm.ubuntu.com-20060222075956-fb281c427e571da6
add LockDir and related fixes

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
2
2
 
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
107
107
                raise errors.FileExists(path, extra=e)
108
108
            if e.errno == errno.EACCES:
109
109
                raise errors.PermissionDenied(path, extra=e)
 
110
            if e.errno == errno.ENOTEMPTY:
 
111
                raise errors.DirectoryNotEmpty(path, extra=e)
110
112
        if raise_generic:
111
113
            raise errors.TransportError(orig_error=e)
112
114
 
223
225
 
224
226
    def iter_files_recursive(self):
225
227
        """Iter the relative paths of files in the transports sub-tree.
 
228
 
 
229
        *NOTE*: This only lists *files*, not subdirectories!
226
230
        
227
231
        As with other listing functions, only some transports implement this,.
228
232
        you may check via is_listable to determine if it will.
358
362
                    files.append(path)
359
363
        source.copy_to(files, target)
360
364
 
 
365
    def rename(self, rel_from, rel_to):
 
366
        """Rename a file or directory.
 
367
 
 
368
        This *must* fail if the destination is a nonempty directory - it must
 
369
        not automatically remove it.  It should raise DirectoryNotEmpty, or
 
370
        some other PathError if the case can't be specifically detected.
 
371
 
 
372
        If the destination is an empty directory or a file this function may
 
373
        either fail or succeed, depending on the underlying transport.  It
 
374
        should not attempt to remove the destination if overwriting is not the
 
375
        native transport behaviour.  If at all possible the transport should
 
376
        ensure that the rename either completes or not, without leaving the
 
377
        destination deleted and the new file not moved in place.
 
378
 
 
379
        This is intended mainly for use in implementing LockDir.
 
380
        """
 
381
        # transports may need to override this
 
382
        raise NotImplementedError(self.rename)
 
383
 
361
384
    def move(self, rel_from, rel_to):
362
385
        """Move the item at rel_from to the location at rel_to.
 
386
 
 
387
        The destination is deleted if possible, even if it's a non-empty
 
388
        directory tree.
363
389
        
364
390
        If a transport can directly implement this it is suggested that
365
391
        it do so for efficiency.