1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2024-12-25 17:27:31 +00:00

fix RobustUnpacker, it missed some metadata keys. add check for unknown metadata keys.

not just the new atime and ctime keys were missing, but also bsdflags.
This commit is contained in:
Thomas Waldmann 2015-11-03 20:21:52 +01:00
parent fa35525b58
commit 12b5d07e55

View file

@ -217,6 +217,9 @@ def iter_items(self, filter=None, preload=False):
yield 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:
self.stats.show_progress(item=item)
self.last_progress = time.time()
@ -589,10 +592,17 @@ def open_noatime_with_fallback(p, s):
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:
"""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):
super().__init__()