summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2010-06-17 17:53:34 +1200
committerLars Wirzenius <liw@liw.fi>2010-06-17 17:53:34 +1200
commit6c7ece3955e6a290ac85d215cf0cd0bbd95e7d81 (patch)
tree44abf9fbe8e67de9e5424bf2bc1569039e5d667c
parent5efc8b829f868e13ddfee92f4548244838081889 (diff)
parent4596d068ba6da1cf190392fa926491a583934c78 (diff)
downloadobnam-6c7ece3955e6a290ac85d215cf0cd0bbd95e7d81.tar.gz
Merge changes to put chunks in a hierarchy of directories, rather than a flat one.
-rw-r--r--obnamlib/store.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/obnamlib/store.py b/obnamlib/store.py
index f961ee8f..7751409d 100644
--- a/obnamlib/store.py
+++ b/obnamlib/store.py
@@ -856,7 +856,10 @@ class Store(object):
self.genstore.remove(filename)
def _chunk_filename(self, chunkid):
- return os.path.join('chunks', '%d' % chunkid)
+ basename = '%06d' % chunkid
+ subdir_1 = basename[-6:-3]
+ subdir_2 = basename[-3:]
+ return os.path.join('chunks', subdir_1, subdir_2, basename)
@require_started_generation
def put_chunk(self, data, checksum):
@@ -882,6 +885,8 @@ class Store(object):
filename = self._chunk_filename(chunkid)
if not self.fs.exists(filename):
break
+ dirname = os.path.dirname(filename)
+ self.fs.makedirs(dirname)
self.fs.write_file(filename, data)
self.chunksums.add(self.checksum(data), chunkid)
return chunkid
@@ -909,10 +914,12 @@ class Store(object):
@require_open_host
def list_chunks(self):
'''Return list of ids of all chunks in store.'''
+ result = []
if self.fs.exists('chunks'):
- return [int(x) for x in self.fs.listdir('chunks')]
- else:
- return []
+ for dirname, subdirs, basenames in self.fs.depth_first('chunks'):
+ for basename in basenames:
+ result.append(int(basename))
+ return result
@require_started_generation
def put_chunk_group(self, chunkids, checksum):