diff options
| author | PJ Eby <distutils-sig@python.org> | 2010-10-12 15:44:18 +0000 |
|---|---|---|
| committer | PJ Eby <distutils-sig@python.org> | 2010-10-12 15:44:18 +0000 |
| commit | ca8f80843db50fd079df0b62180d85c83cd937cc (patch) | |
| tree | fefff4b1f45198259dd7edfb58515d61318fba96 /setuptools/archive_util.py | |
| parent | f86fa331e8d2165d9aba0bc6d44af1db987d5239 (diff) | |
| download | python-setuptools-git-ca8f80843db50fd079df0b62180d85c83cd937cc.tar.gz | |
Backport
--HG--
branch : setuptools-0.6
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/branches/setuptools-0.6%4085381
Diffstat (limited to 'setuptools/archive_util.py')
| -rwxr-xr-x | setuptools/archive_util.py | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/setuptools/archive_util.py b/setuptools/archive_util.py index eae3729a..d26b383b 100755 --- a/setuptools/archive_util.py +++ b/setuptools/archive_util.py @@ -6,7 +6,7 @@ __all__ = [ "UnrecognizedFormat", "extraction_drivers", "unpack_directory", ] -import zipfile, tarfile, os, shutil +import zipfile, tarfile, os, shutil, posixpath from pkg_resources import ensure_directory from distutils.errors import DistutilsError @@ -169,14 +169,12 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter): by ``tarfile.open()``). See ``unpack_archive()`` for an explanation of the `progress_filter` argument. """ - try: tarobj = tarfile.open(filename) except tarfile.TarError: raise UnrecognizedFormat( "%s is not a compressed or uncompressed tar file" % (filename,) ) - try: tarobj.chown = lambda *args: None # don't do any chowning! for member in tarobj: @@ -184,9 +182,12 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter): # don't extract absolute paths or ones with .. in them if not name.startswith('/') and '..' not in name: dst = os.path.join(extract_dir, *name.split('/')) - while member is not None and (member.islnk() or member.issym()): - member = tarobj._getmember(member.linkname, member) + linkpath = member.linkname + if member.issym(): + linkpath = posixpath.join(posixpath.dirname(member.name), linkpath) + linkpath = posixpath.normpath(linkpath) + member = tarobj._getmember(linkpath) if member is not None and (member.isfile() or member.isdir()): dst = progress_filter(name, dst) @@ -201,5 +202,4 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter): finally: tarobj.close() - extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile |
