From b5d43506d3aa595b2528b127a8b312d136936d23 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Tue, 23 Aug 2022 21:56:31 +0200 Subject: [PATCH] extended stat: more fine grained exception handling see #6988: it was unclear where exactly the error came from (flags, xattrs or ACLs getting?). --- src/borg/archive.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/borg/archive.py b/src/borg/archive.py index e31380a05..8cd261ad4 100644 --- a/src/borg/archive.py +++ b/src/borg/archive.py @@ -1157,15 +1157,19 @@ class MetadataCollector: def stat_ext_attrs(self, st, path, fd=None): attrs = {} - with backup_io('extended stat'): - flags = 0 if self.noflags else get_flags(path, st, fd=fd) - xattrs = {} if self.noxattrs else xattr.get_all(fd or path, follow_symlinks=False) - if not self.noacls: + if not self.noflags: + with backup_io('extended stat (flags)'): + flags = get_flags(path, st, fd=fd) + if flags: + attrs['bsdflags'] = flags + if not self.noxattrs: + with backup_io('extended stat (xattrs)'): + xattrs = xattr.get_all(fd or path, follow_symlinks=False) + if xattrs: + attrs['xattrs'] = StableDict(xattrs) + if not self.noacls: + with backup_io('extended stat (ACLs)'): acl_get(path, attrs, st, self.numeric_ids, fd=fd) - if xattrs: - attrs['xattrs'] = StableDict(xattrs) - if flags: - attrs['bsdflags'] = flags return attrs def stat_attrs(self, st, path, fd=None):