mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-25 17:27:31 +00:00
Merge branch 'master' of github.com:borgbackup/borg
This commit is contained in:
commit
0f0a21cf54
1 changed files with 13 additions and 2 deletions
|
@ -217,6 +217,9 @@ def iter_items(self, filter=None, preload=False):
|
||||||
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 @@ def process_stdin(self, path, cache):
|
||||||
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 @@ def open_noatime_with_fallback(p, s):
|
||||||
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__()
|
||||||
|
|
Loading…
Reference in a new issue