Explorar o código

file stats are packed with 'int_to_bigint' in the archive. Unpack these before passing to llfuse

Mitch Bigelow %!s(int64=9) %!d(string=hai) anos
pai
achega
6260648266
Modificáronse 1 ficheiros con 19 adicións e 7 borrados
  1. 19 7
      borg/fuse.py

+ 19 - 7
borg/fuse.py

@@ -7,7 +7,7 @@ import stat
 import tempfile
 import tempfile
 import time
 import time
 from .archive import Archive
 from .archive import Archive
-from .helpers import daemonize
+from .helpers import daemonize, bigint_to_int
 
 
 import msgpack
 import msgpack
 
 
@@ -155,13 +155,25 @@ class FuseOperations(llfuse.Operations):
         entry.st_blocks = dsize / 512
         entry.st_blocks = dsize / 512
         # note: older archives only have mtime (not atime nor ctime)
         # note: older archives only have mtime (not atime nor ctime)
         if have_fuse_xtime_ns:
         if have_fuse_xtime_ns:
-            entry.st_atime_ns = item.get(b'atime') or item[b'mtime']
-            entry.st_mtime_ns = item[b'mtime']
-            entry.st_ctime_ns = item.get(b'ctime') or item[b'mtime']
+            entry.st_mtime_ns = bigint_to_int(item[b'mtime'])
+            if b'atime' in item:
+                entry.st_atime_ns = bigint_to_int(item[b'atime'])
+            else:
+                entry.st_atime_ns = bigint_to_int(item[b'mtime'])
+            if b'ctime' in item:
+                entry.st_ctime_ns = bigint_to_int(item[b'ctime'])
+            else:
+                entry.st_ctime_ns = bigint_to_int(item[b'mtime'])
         else:
         else:
-            entry.st_atime = (item.get(b'atime') or item[b'mtime']) / 1e9
-            entry.st_mtime = item[b'mtime'] / 1e9
-            entry.st_ctime = (item.get(b'ctime') or item[b'mtime']) / 1e9
+            entry.st_mtime_ns = bigint_to_int(item[b'mtime']) / 1e9
+            if b'atime' in item:
+                entry.st_atime_ns = bigint_to_int(item[b'atime']) / 1e9
+            else:
+                entry.st_atime_ns = bigint_to_int(item[b'mtime']) / 1e9
+            if b'ctime' in item:
+                entry.st_ctime_ns = bigint_to_int(item[b'ctime']) / 1e9
+            else:
+                entry.st_ctime_ns = bigint_to_int(item[b'mtime']) / 1e9
         return entry
         return entry
 
 
     def listxattr(self, inode):
     def listxattr(self, inode):