def _map_path(self, source):
result = {}
cwd = os.getcwd()
if isinstance(source, (str, path)):
dest = os.path.abspath(os.path.expanduser(source))
# we use samefile to avoid problems with case-insensitive file system #522
# we also use the "cwd" name to avoid wrong case for cwd. For example,
# if the cwd = '/Users/user/Project'
# then, dest = '/USERS/USER/PROJECT/a.txt'
# would be converted to '/Users/user/Project/a.txt' before path mapping
if os.path.exists(dest[:len(cwd)]) and os.path.samefile(dest[:len(cwd)], cwd):
dest = cwd + dest[len(cwd):]
matched = [k for k in self.path_map.keys() if os.path.exists(dest[:len(k)]) and os.path.samefile(dest[:len(k)], k)]
if matched:
# pick the longest key that matches
k = max(matched, key=len)
dest = self.path_map[k] + dest[len(k):]
else:
env.logger.warning(
f'Path {source} is not under any specified paths of localhost and is mapped to {dest} on remote host.')
result[source] = dest.replace('\\', '/')
elif isinstance(source, (Sequence, set)):
for src in source:
result.update(self._map_path(src))
else:
env.logger.debug(f'Ignore unmappable source {source}')
return {source: source}
return result
#
# Interface functions
#
评论列表
文章目录