def get_tree(self, path):
path = path.lstrip(os.sep.encode('utf-8'))
directory = os.path.join(self.root, path)
tree = Tree()
directory_items = self._sftp.listdir_attr_b(directory)
for fattr in directory_items:
filename = fattr.filename
item = {}
if stat.S_ISREG(fattr.st_mode):
item['type'] = 'blob'
item['filetype'] = 'regular'
elif stat.S_ISDIR(fattr.st_mode):
item['type'] = 'tree'
item['filetype'] = 'directory'
elif stat.S_ISLNK(fattr.st_mode):
item['filetype'] = 'link'
item['link'] = self._sftp.readlink(os.path.join(directory, filename)).encode('utf8')
elif stat.S_ISFIFO(fattr.st_mode):
item['filetype'] = 'fifo'
else:
continue # FIXME: Warn
fmode = fattr.st_mode & (stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO | stat.S_ISVTX)
item['uid'] = fattr.st_uid
item['gid'] = fattr.st_gid
item['mode'] = fmode
item['mtime'] = int(fattr.st_mtime)
item['size'] = fattr.st_size
tree.add(filename, item)
return tree
评论列表
文章目录