_bup_lutimes(path, (atime, mtime))
+def _fix_cygwin_id(id):
+ if id < 0:
+ id += 0x100000000
+ assert(id >= 0)
+ return id
+
+
class stat_result:
@staticmethod
def from_xstat_rep(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)
return result
def mode_str(mode):
result = ''
+ # FIXME: Other types?
if pystat.S_ISREG(mode):
result += '-'
elif pystat.S_ISDIR(mode):
result += 'w' if (mode & pystat.S_IWOTH) else '-'
result += 'x' if (mode & pystat.S_IXOTH) else '-'
return result
+
+
+def classification_str(mode, include_exec):
+ if pystat.S_ISREG(mode):
+ if include_exec \
+ and (pystat.S_IMODE(mode) \
+ & (pystat.S_IXUSR | pystat.S_IXGRP | pystat.S_IXOTH)):
+ return '*'
+ else:
+ return ''
+ elif pystat.S_ISDIR(mode):
+ return '/'
+ elif pystat.S_ISLNK(mode):
+ return '@'
+ elif pystat.S_ISFIFO(mode):
+ return '|'
+ elif pystat.S_ISSOCK(mode):
+ return '='
+ else:
+ return ''