Fix the breakage of Lib/tarfile.py on non-Windows platforms due to

using WindowsError in a try/except. Only add WindowsError to the list of
exceptions to catch when we are actually running on Windows.

Additionally, add a call that was left out in test_posixpath.

Thanks Amaury, Antoine, and Jason.
This commit is contained in:
Brian Curtin 2010-07-09 13:54:27 +00:00
parent 4b83af9576
commit 16633fa497
2 changed files with 15 additions and 6 deletions

View file

@ -55,6 +55,15 @@ try:
except ImportError:
grp = pwd = None
# os.symlink on Windows prior to 6.0 raises NotImplementedError
symlink_exception = (AttributeError, NotImplementedError)
try:
# WindowsError (1314) will be raised if the caller does not hold the
# SeCreateSymbolicLinkPrivilege privilege
symlink_exception += (WindowsError,)
except NameError:
pass
# from tarfile import *
__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError"]
@ -2283,17 +2292,16 @@ class TarFile(object):
os.link(tarinfo._link_target, targetpath)
else:
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
except symlink_exception:
if tarinfo.issym():
linkpath = os.path.join(os.path.dirname(tarinfo.name),tarinfo.linkname)
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)
self._extract_member(self._find_link_target(tarinfo),
targetpath)
except KeyError:
raise ExtractError("unable to resolve link inside archive")