Resolve Windows-specific link issues
This commit is contained in:
parent
4469b857aa
commit
78bec43e33
|
@ -4,7 +4,6 @@ import glob
|
||||||
import shutil
|
import shutil
|
||||||
import dotbot
|
import dotbot
|
||||||
import dotbot.util
|
import dotbot.util
|
||||||
import subprocess
|
|
||||||
|
|
||||||
|
|
||||||
class Link(dotbot.Plugin):
|
class Link(dotbot.Plugin):
|
||||||
|
@ -58,7 +57,7 @@ class Link(dotbot.Plugin):
|
||||||
if test is not None and not self._test_success(test):
|
if test is not None and not self._test_success(test):
|
||||||
self._log.lowinfo("Skipping %s" % destination)
|
self._log.lowinfo("Skipping %s" % destination)
|
||||||
continue
|
continue
|
||||||
path = os.path.expandvars(os.path.expanduser(path))
|
path = os.path.normpath(os.path.expandvars(os.path.expanduser(path)))
|
||||||
if use_glob:
|
if use_glob:
|
||||||
glob_results = self._create_glob_results(path, exclude_paths)
|
glob_results = self._create_glob_results(path, exclude_paths)
|
||||||
if len(glob_results) == 0:
|
if len(glob_results) == 0:
|
||||||
|
@ -166,6 +165,8 @@ class Link(dotbot.Plugin):
|
||||||
return []
|
return []
|
||||||
# call glob.glob; only python >= 3.5 supports recursive globs
|
# call glob.glob; only python >= 3.5 supports recursive globs
|
||||||
found = glob.glob(path) if (sys.version_info < (3, 5)) else glob.glob(path, recursive=True)
|
found = glob.glob(path) if (sys.version_info < (3, 5)) else glob.glob(path, recursive=True)
|
||||||
|
# normalize paths to ensure cross-platform compatibility
|
||||||
|
found = [os.path.normpath(p) for p in found]
|
||||||
# if using recursive glob (`**`), filter results to return only files:
|
# if using recursive glob (`**`), filter results to return only files:
|
||||||
if "**" in path and not path.endswith(str(os.sep)):
|
if "**" in path and not path.endswith(str(os.sep)):
|
||||||
self._log.debug("Excluding directories from recursive glob: " + str(path))
|
self._log.debug("Excluding directories from recursive glob: " + str(path))
|
||||||
|
@ -197,7 +198,10 @@ class Link(dotbot.Plugin):
|
||||||
Returns the destination of the symbolic link.
|
Returns the destination of the symbolic link.
|
||||||
"""
|
"""
|
||||||
path = os.path.expanduser(path)
|
path = os.path.expanduser(path)
|
||||||
return os.readlink(path)
|
path = os.readlink(path)
|
||||||
|
if sys.platform[:5] == "win32" and path.startswith("\\\\?\\"):
|
||||||
|
path = path[4:]
|
||||||
|
return path
|
||||||
|
|
||||||
def _exists(self, path):
|
def _exists(self, path):
|
||||||
"""
|
"""
|
||||||
|
@ -223,7 +227,7 @@ class Link(dotbot.Plugin):
|
||||||
def _delete(self, source, path, relative, canonical_path, force):
|
def _delete(self, source, path, relative, canonical_path, force):
|
||||||
success = True
|
success = True
|
||||||
source = os.path.join(self._context.base_directory(canonical_path=canonical_path), source)
|
source = os.path.join(self._context.base_directory(canonical_path=canonical_path), source)
|
||||||
fullpath = os.path.expanduser(path)
|
fullpath = os.path.abspath(os.path.expanduser(path))
|
||||||
if relative:
|
if relative:
|
||||||
source = self._relative_path(source, fullpath)
|
source = self._relative_path(source, fullpath)
|
||||||
if (self._is_link(path) and self._link_destination(path) != source) or (
|
if (self._is_link(path) and self._link_destination(path) != source) or (
|
||||||
|
@ -264,9 +268,10 @@ class Link(dotbot.Plugin):
|
||||||
Returns true if successfully linked files.
|
Returns true if successfully linked files.
|
||||||
"""
|
"""
|
||||||
success = False
|
success = False
|
||||||
destination = os.path.expanduser(link_name)
|
destination = os.path.abspath(os.path.expanduser(link_name))
|
||||||
base_directory = self._context.base_directory(canonical_path=canonical_path)
|
base_directory = self._context.base_directory(canonical_path=canonical_path)
|
||||||
absolute_source = os.path.join(base_directory, source)
|
absolute_source = os.path.join(base_directory, source)
|
||||||
|
link_name = os.path.normpath(link_name)
|
||||||
if relative:
|
if relative:
|
||||||
source = self._relative_path(absolute_source, destination)
|
source = self._relative_path(absolute_source, destination)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue