mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Implement #1578269. Patch by Jason R. Coombs.
Added Windows support for os.symlink when run on Windows 6.0 or greater, aka Vista. Previous Windows versions will raise NotImplementedError when trying to symlink. Includes numerous test updates and additions to test_os, including a symlink_support module because of the fact that privilege escalation is required in order to run the tests to ensure that the user is able to create symlinks. By default, accounts do not have the required privilege, so the escalation code will have to be exposed later (or documented on how to do so). I'll be following up with that work next. Note that the tests use ctypes, which was agreed on during the PyCon language summit.
This commit is contained in:
parent
0dd8f7890a
commit
d40e6f70a5
18 changed files with 1161 additions and 275 deletions
|
@ -2273,7 +2273,7 @@ class TarFile(object):
|
|||
(platform limitation), we try to make a copy of the referenced file
|
||||
instead of a link.
|
||||
"""
|
||||
if hasattr(os, "symlink") and hasattr(os, "link"):
|
||||
try:
|
||||
# For systems that support symbolic and hard links.
|
||||
if tarinfo.issym():
|
||||
os.symlink(tarinfo.linkname, targetpath)
|
||||
|
@ -2282,7 +2282,15 @@ class TarFile(object):
|
|||
if os.path.exists(tarinfo._link_target):
|
||||
os.link(tarinfo._link_target, targetpath)
|
||||
else:
|
||||
self._extract_member(self._find_link_target(tarinfo), targetpath)
|
||||
self._extract_mem
|
||||
except (AttributeError, NotImplementedError, WindowsError):
|
||||
# AttributeError if no os.symlink
|
||||
# NotImplementedError if on Windows XP
|
||||
# WindowsError (1314) if the required privilege is not held by the client
|
||||
if tarinfo.issym():
|
||||
linkpath = os.path.join(os.path.dirname(tarinfo.name),tarinfo.linkname)
|
||||
else:
|
||||
linkpath = tarinfo.linkname
|
||||
else:
|
||||
try:
|
||||
self._extract_member(self._find_link_target(tarinfo), targetpath)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue