Force use of posixpath when joining salt fileserver paths in gitfs

This commit is contained in:
Erik Johnson 2017-03-28 14:20:21 -05:00
parent cafa08d8e0
commit a8bcaa73d7

View file

@ -770,7 +770,8 @@ class GitPython(GitProvider):
relpath = lambda path: os.path.relpath(path, self.root)
else:
relpath = lambda path: path
add_mountpoint = lambda path: salt.utils.path_join(self.mountpoint, path)
add_mountpoint = lambda path: salt.utils.path_join(
self.mountpoint, path, use_posixpath=True)
for blob in tree.traverse():
if isinstance(blob, git.Tree):
ret.add(add_mountpoint(relpath(blob.path)))
@ -846,7 +847,8 @@ class GitPython(GitProvider):
relpath = lambda path: os.path.relpath(path, self.root)
else:
relpath = lambda path: path
add_mountpoint = lambda path: salt.utils.path_join(self.mountpoint, path)
add_mountpoint = lambda path: salt.utils.path_join(
self.mountpoint, path, use_posixpath=True)
for file_blob in tree.traverse():
if not isinstance(file_blob, git.Blob):
continue
@ -888,7 +890,8 @@ class GitPython(GitProvider):
stream.seek(0)
link_tgt = stream.read()
stream.close()
path = salt.utils.path_join(os.path.dirname(path), link_tgt)
path = salt.utils.path_join(
os.path.dirname(path), link_tgt, use_posixpath=True)
else:
blob = file_blob
if isinstance(blob, git.Tree):
@ -1263,9 +1266,14 @@ class Pygit2(GitProvider):
blob = self.repo[entry.oid]
if not isinstance(blob, pygit2.Tree):
continue
blobs.append(salt.utils.path_join(prefix, entry.name))
blobs.append(
salt.utils.path_join(prefix, entry.name, use_posixpath=True)
)
if len(blob):
_traverse(blob, blobs, salt.utils.path_join(prefix, entry.name))
_traverse(
blob, blobs, salt.utils.path_join(
prefix, entry.name, use_posixpath=True)
)
ret = set()
tree = self.get_tree(tgt_env)
@ -1285,7 +1293,8 @@ class Pygit2(GitProvider):
blobs = []
if len(tree):
_traverse(tree, blobs, self.root)
add_mountpoint = lambda path: salt.utils.path_join(self.mountpoint, path)
add_mountpoint = lambda path: salt.utils.path_join(
self.mountpoint, path, use_posixpath=True)
for blob in blobs:
ret.add(add_mountpoint(relpath(blob)))
if self.mountpoint:
@ -1375,13 +1384,17 @@ class Pygit2(GitProvider):
continue
obj = self.repo[entry.oid]
if isinstance(obj, pygit2.Blob):
repo_path = salt.utils.path_join(prefix, entry.name)
repo_path = salt.utils.path_join(
prefix, entry.name, use_posixpath=True)
blobs.setdefault('files', []).append(repo_path)
if stat.S_ISLNK(tree[entry.name].filemode):
link_tgt = self.repo[tree[entry.name].oid].data
blobs.setdefault('symlinks', {})[repo_path] = link_tgt
elif isinstance(obj, pygit2.Tree):
_traverse(obj, blobs, salt.utils.path_join(prefix, entry.name))
_traverse(
obj, blobs, salt.utils.path_join(
prefix, entry.name, use_posixpath=True)
)
files = set()
symlinks = {}
@ -1405,7 +1418,8 @@ class Pygit2(GitProvider):
blobs = {}
if len(tree):
_traverse(tree, blobs, self.root)
add_mountpoint = lambda path: salt.utils.path_join(self.mountpoint, path)
add_mountpoint = lambda path: salt.utils.path_join(
self.mountpoint, path, use_posixpath=True)
for repo_path in blobs.get('files', []):
files.add(add_mountpoint(relpath(repo_path)))
for repo_path, link_tgt in six.iteritems(blobs.get('symlinks', {})):
@ -1434,7 +1448,8 @@ class Pygit2(GitProvider):
# the symlink and set path to the location indicated
# in the blob data.
link_tgt = self.repo[tree[path].oid].data
path = salt.utils.path_join(os.path.dirname(path), link_tgt)
path = salt.utils.path_join(
os.path.dirname(path), link_tgt, use_posixpath=True)
else:
oid = tree[path].oid
blob = self.repo[oid]
@ -1645,9 +1660,14 @@ class Dulwich(GitProvider): # pylint: disable=abstract-method
continue
if not isinstance(obj, dulwich.objects.Tree):
continue
blobs.append(salt.utils.path_join(prefix, item.path))
blobs.append(
salt.utils.path_join(prefix, item.path, use_posixpath=True)
)
if len(self.repo.get_object(item.sha)):
_traverse(obj, blobs, salt.utils.path_join(prefix, item.path))
_traverse(
obj, blobs, salt.utils.path_join(
prefix, item.path, use_posixpath=True)
)
ret = set()
tree = self.get_tree(tgt_env)
@ -1661,7 +1681,8 @@ class Dulwich(GitProvider): # pylint: disable=abstract-method
relpath = lambda path: os.path.relpath(path, self.root)
else:
relpath = lambda path: path
add_mountpoint = lambda path: salt.utils.path_join(self.mountpoint, path)
add_mountpoint = lambda path: salt.utils.path_join(
self.mountpoint, path, use_posixpath=True)
for blob in blobs:
ret.add(add_mountpoint(relpath(blob)))
if self.mountpoint:
@ -1761,14 +1782,18 @@ class Dulwich(GitProvider): # pylint: disable=abstract-method
# Entry is a submodule, skip it
continue
if isinstance(obj, dulwich.objects.Blob):
repo_path = salt.utils.path_join(prefix, item.path)
repo_path = salt.utils.path_join(
prefix, item.path, use_posixpath=True)
blobs.setdefault('files', []).append(repo_path)
mode, oid = tree[item.path]
if stat.S_ISLNK(mode):
link_tgt = self.repo.get_object(oid).as_raw_string()
blobs.setdefault('symlinks', {})[repo_path] = link_tgt
elif isinstance(obj, dulwich.objects.Tree):
_traverse(obj, blobs, salt.utils.path_join(prefix, item.path))
_traverse(
obj, blobs, salt.utils.path_join(
prefix, item.path, use_posixpath=True)
)
files = set()
symlinks = {}
@ -1783,7 +1808,8 @@ class Dulwich(GitProvider): # pylint: disable=abstract-method
relpath = lambda path: os.path.relpath(path, self.root)
else:
relpath = lambda path: path
add_mountpoint = lambda path: salt.utils.path_join(self.mountpoint, path)
add_mountpoint = lambda path: salt.utils.path_join(
self.mountpoint, path, use_posixpath=True)
for repo_path in blobs.get('files', []):
files.add(add_mountpoint(relpath(repo_path)))
for repo_path, link_tgt in six.iteritems(blobs.get('symlinks', {})):
@ -1818,7 +1844,8 @@ class Dulwich(GitProvider): # pylint: disable=abstract-method
# symlink. Follow the symlink and set path to the
# location indicated in the blob data.
link_tgt = self.repo.get_object(oid).as_raw_string()
path = salt.utils.path_join(os.path.dirname(path), link_tgt)
path = salt.utils.path_join(
os.path.dirname(path), link_tgt, use_posixpath=True)
else:
blob = self.repo.get_object(oid)
if isinstance(blob, dulwich.objects.Tree):
@ -2017,10 +2044,10 @@ class GitBase(object):
if cache_root is not None:
self.cache_root = cache_root
else:
self.cache_root = salt.utils.path_join(self.opts['cachedir'], self.role)
self.cache_root = salt.utils.path_join(
self.opts['cachedir'], self.role)
self.env_cache = salt.utils.path_join(self.cache_root, 'envs.p')
self.hash_cachedir = salt.utils.path_join(
self.cache_root, 'hash')
self.hash_cachedir = salt.utils.path_join(self.cache_root, 'hash')
self.file_list_cachedir = salt.utils.path_join(
self.opts['cachedir'], 'file_lists', self.role)