~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/store/__init__.py

[merge] from robert and newformat

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
"""
26
26
 
27
27
from cStringIO import StringIO
 
28
from stat import ST_MODE, S_ISDIR
 
29
from zlib import adler32
28
30
 
29
31
from bzrlib.errors import BzrError, UnlistableStore, TransportNotPossible
30
32
from bzrlib.trace import mutter
204
206
 
205
207
    __str__ = __repr__
206
208
 
 
209
    def _iter_relpaths(self):
 
210
        """Iter the relative paths of files in the transports sub-tree."""
 
211
        transport = self._transport
 
212
        queue = list(transport.list_dir('.'))
 
213
        while queue:
 
214
            relpath = queue.pop(0)
 
215
            st = transport.stat(relpath)
 
216
            if S_ISDIR(st[ST_MODE]):
 
217
                for i, basename in enumerate(transport.list_dir(relpath)):
 
218
                    queue.insert(i, relpath+'/'+basename)
 
219
            else:
 
220
                yield relpath, st
 
221
 
207
222
    def listable(self):
208
223
        """Return True if this store is able to be listed."""
209
224
        return self._transport.listable()
307
322
    ids = [f for f in store_from]
308
323
    store_to.copy_multi(store_from, ids)
309
324
 
 
325
def hash_prefix(file_id):
 
326
    return "%02x/" % (adler32(file_id) & 0xff)
 
327