diff options
author | Lars Wirzenius <liw@liw.fi> | 2010-06-17 17:53:34 +1200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2010-06-17 17:53:34 +1200 |
commit | 6c7ece3955e6a290ac85d215cf0cd0bbd95e7d81 (patch) | |
tree | 44abf9fbe8e67de9e5424bf2bc1569039e5d667c | |
parent | 5efc8b829f868e13ddfee92f4548244838081889 (diff) | |
parent | 4596d068ba6da1cf190392fa926491a583934c78 (diff) | |
download | obnam-6c7ece3955e6a290ac85d215cf0cd0bbd95e7d81.tar.gz |
Merge changes to put chunks in a hierarchy of directories, rather than a flat one.
-rw-r--r-- | obnamlib/store.py | 15 |
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): |