~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/local.py

  • Committer: Robert Collins
  • Date: 2005-10-16 14:19:24 UTC
  • mto: This revision was merged to the branch mainline in revision 1459.
  • Revision ID: robertc@lifelesslap.robertcollins.net-20051016141924-8dcbb20f1c03756e
Many transport related tweaks:

- Remove get_partial as it was not used at all.
- Move store._iter_relpaths into transport as iter_files_recursive.
- Nuke ImmutableMemoryStore, replaced with MemoryTransport.
- Remove all direct use of the stat module from store logic.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
import os
20
20
import errno
21
21
import shutil
 
22
from stat import ST_MODE, S_ISDIR, ST_SIZE
22
23
import tempfile
23
24
 
24
25
from bzrlib.trace import mutter
85
86
                raise NoSuchFile('File or directory %r does not exist' % path, orig_error=e)
86
87
            raise LocalTransportError(orig_error=e)
87
88
 
88
 
    def get_partial(self, relpath, start, length=None):
89
 
        """Get just part of a file.
90
 
 
91
 
        :param relpath: Path to the file, relative to base
92
 
        :param start: The starting position to read from
93
 
        :param length: The length to read. A length of None indicates
94
 
                       read to the end of the file.
95
 
        :return: A file-like object containing at least the specified bytes.
96
 
                 Some implementations may return objects which can be read
97
 
                 past this length, but this is not guaranteed.
98
 
        """
99
 
        # LocalTransport.get_partial() doesn't care about the length
100
 
        # argument, because it is using a local file, and thus just
101
 
        # returns the file seek'ed to the appropriate location.
102
 
        try:
103
 
            path = self.abspath(relpath)
104
 
            f = open(path, 'rb')
105
 
            f.seek(start, 0)
106
 
            return f
107
 
        except IOError,e:
108
 
            if e.errno == errno.ENOENT:
109
 
                raise NoSuchFile('File %r does not exist' % path, orig_error=e)
110
 
            raise LocalTransportError(orig_error=e)
111
 
 
112
89
    def put(self, relpath, f):
113
90
        """Copy the file-like or string object into the location.
114
91
 
130
107
        finally:
131
108
            fp.close()
132
109
 
 
110
    def iter_files_recursive(self):
 
111
        """Iter the relative paths of files in the transports sub-tree."""
 
112
        queue = list(self.list_dir('.'))
 
113
        while queue:
 
114
            relpath = queue.pop(0)
 
115
            st = self.stat(relpath)
 
116
            if S_ISDIR(st[ST_MODE]):
 
117
                for i, basename in enumerate(self.list_dir(relpath)):
 
118
                    queue.insert(i, relpath+'/'+basename)
 
119
            else:
 
120
                yield relpath
 
121
 
133
122
    def mkdir(self, relpath):
134
123
        """Create a directory at the given path."""
135
124
        try: