]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/xstat.py
timespec_to_nsecs(): don't destructure arguments
[bup.git] / lib / bup / xstat.py
index 37f90be704fcba5b3f6f433dbf885ee1fca9f947..3ba7b96cf74f7e37dccd41cdcc64b6aa48bef4df 100644 (file)
@@ -1,5 +1,7 @@
 """Enhanced stat operations for bup."""
-import os
+
+from __future__ import absolute_import
+import os, sys
 import stat as pystat
 from bup import _helpers
 
@@ -19,7 +21,8 @@ except AttributeError as e:
     _bup_lutimes = False
 
 
-def timespec_to_nsecs((ts_s, ts_ns)):
+def timespec_to_nsecs(ts):
+    ts_s, ts_ns = ts
     return ts_s * 10**9 + ts_ns
 
 
@@ -80,6 +83,7 @@ else: # Must have these if utimensat isn't available.
         mtime = nsecs_to_timeval(times[1])
         _bup_lutimes(path, (atime, mtime))
 
+_cygwin_sys = sys.platform.startswith('cygwin')
 
 def _fix_cygwin_id(id):
     if id < 0:
@@ -91,6 +95,7 @@ def _fix_cygwin_id(id):
 class stat_result:
     @staticmethod
     def from_xstat_rep(st):
+        global _cygwin_sys
         result = stat_result()
         (result.st_mode,
          result.st_ino,
@@ -103,11 +108,13 @@ class stat_result:
          result.st_atime,
          result.st_mtime,
          result.st_ctime) = st
-        result.st_atime = timespec_to_nsecs(result.st_atime)
-        result.st_mtime = timespec_to_nsecs(result.st_mtime)
-        result.st_ctime = timespec_to_nsecs(result.st_ctime)
-        result.st_uid = _fix_cygwin_id(result.st_uid)
-        result.st_gid = _fix_cygwin_id(result.st_gid)
+        # Inlined timespec_to_nsecs after profiling
+        result.st_atime = result.st_atime[0] * 10**9 + result.st_atime[1]
+        result.st_mtime = result.st_mtime[0] * 10**9 + result.st_mtime[1]
+        result.st_ctime = result.st_ctime[0] * 10**9 + result.st_ctime[1]
+        if _cygwin_sys:
+            result.st_uid = _fix_cygwin_id(result.st_uid)
+            result.st_gid = _fix_cygwin_id(result.st_gid)
         return result