Merge pull request #369 from ThomasWaldmann/fix-key-check

Fix key check
This commit is contained in:
TW 2015-11-03 20:43:17 +01:00
commit 15dd64cdaf
1 changed files with 13 additions and 2 deletions

View File

@ -217,6 +217,9 @@ Number of files: {0.stats.nfiles}'''.format(self)
yield item yield item
def add_item(self, item): def add_item(self, item):
unknown_keys = set(item) - ITEM_KEYS
assert not unknown_keys, ('unknown item metadata keys detected, please update ITEM_KEYS: %s',
','.join(k.decode('ascii') for k in unknown_keys))
if self.show_progress and time.time() - self.last_progress > 0.2: if self.show_progress and time.time() - self.last_progress > 0.2:
self.stats.show_progress(item=item) self.stats.show_progress(item=item)
self.last_progress = time.time() self.last_progress = time.time()
@ -483,13 +486,14 @@ Number of files: {0.stats.nfiles}'''.format(self)
for chunk in self.chunker.chunkify(fd): for chunk in self.chunker.chunkify(fd):
chunks.append(cache.add_chunk(self.key.id_hash(chunk), chunk, self.stats)) chunks.append(cache.add_chunk(self.key.id_hash(chunk), chunk, self.stats))
self.stats.nfiles += 1 self.stats.nfiles += 1
t = int_to_bigint(int(time.time()) * 1000000000)
item = { item = {
b'path': path, b'path': path,
b'chunks': chunks, b'chunks': chunks,
b'mode': 0o100660, # regular file, ug=rw b'mode': 0o100660, # regular file, ug=rw
b'uid': uid, b'user': uid2user(uid), b'uid': uid, b'user': uid2user(uid),
b'gid': gid, b'group': gid2group(gid), b'gid': gid, b'group': gid2group(gid),
b'mtime': int_to_bigint(int(time.time()) * 1000000000) b'mtime': t, b'atime': t, b'ctime': t,
} }
self.add_item(item) self.add_item(item)
return 'i' # stdin return 'i' # stdin
@ -588,10 +592,17 @@ Number of files: {0.stats.nfiles}'''.format(self)
return Archive._open_rb(path, st) return Archive._open_rb(path, st)
# this set must be kept complete, otherwise the RobustUnpacker might malfunction:
ITEM_KEYS = set([b'path', b'source', b'rdev', b'chunks',
b'mode', b'user', b'group', b'uid', b'gid', b'mtime', b'atime', b'ctime',
b'xattrs', b'bsdflags',
])
class RobustUnpacker: class RobustUnpacker:
"""A restartable/robust version of the streaming msgpack unpacker """A restartable/robust version of the streaming msgpack unpacker
""" """
item_keys = [msgpack.packb(name) for name in ('path', 'mode', 'source', 'chunks', 'rdev', 'xattrs', 'user', 'group', 'uid', 'gid', 'mtime')] item_keys = [msgpack.packb(name) for name in ITEM_KEYS]
def __init__(self, validator): def __init__(self, validator):
super().__init__() super().__init__()