浏览代码

Merge pull request #1285 from enkore/issue/1222

wrap get_flags with backup_io
TW 9 年之前
父节点
当前提交
73ba642578
共有 2 个文件被更改,包括 9 次插入6 次删除
  1. 3 4
      src/borg/archive.py
  2. 6 2
      src/borg/archiver.py

+ 3 - 4
src/borg/archive.py

@@ -597,7 +597,7 @@ Number of files: {0.stats.nfiles}'''.format(
             try:
                 self.cache.chunk_decref(id, stats)
             except KeyError:
-                cid = hexlify(id).decode('ascii')
+                cid = bin_to_hex(id)
                 raise ChunksIndexError(cid)
             except Repository.ObjectNotFound as e:
                 # object not in repo - strange, but we wanted to delete it anyway.
@@ -657,13 +657,12 @@ Number of files: {0.stats.nfiles}'''.format(
             attrs['user'] = attrs['group'] = None
         with backup_io():
             xattrs = xattr.get_all(path, follow_symlinks=False)
+            bsdflags = get_flags(path, st)
+            acl_get(path, attrs, st, self.numeric_owner)
         if xattrs:
             attrs['xattrs'] = StableDict(xattrs)
-        bsdflags = get_flags(path, st)
         if bsdflags:
             attrs['bsdflags'] = bsdflags
-        with backup_io():
-            acl_get(path, attrs, st, self.numeric_owner)
         return attrs
 
     def process_dir(self, path, st):

+ 6 - 2
src/borg/archiver.py

@@ -324,8 +324,12 @@ class Archiver:
             return
         status = None
         # Ignore if nodump flag is set
-        if get_flags(path, st) & stat.UF_NODUMP:
-            self.print_file_status('x', path)
+        try:
+            if get_flags(path, st) & stat.UF_NODUMP:
+                self.print_file_status('x', path)
+                return
+        except OSError as e:
+            self.print_warning('%s: %s', path, e)
             return
         if stat.S_ISREG(st.st_mode):
             if not dry_run: